Wie man Widget-Größenänderungen auf Geräten fängt, wo onAppWidgetOptionsChanged nicht angerufen wird?

Geräte wie Samsung Galaxy S3, die mit Android Version 4.1.2 arbeiten, hat einen Bug, der verhindert, dass onAppWidgetOptionsChanged aufgerufen wird.

Also, wie können wir Informationen über veränderte Größen erhalten?

  • So ändern Sie EditText Zeigerfarbe (nicht Cursor)
  • Holen Sie sich die Größe von meinem Homescreen-Widget
  • Android: LinearLayout-Center für alle Bildschirmgrößen ausrichten
  • Weisen Sie die Breite der halben verfügbaren Bildschirmbreite deklarativ zu
  • Zwei Tasten von Android-Widgets, die dieselbe Aktivität mit verschiedenen Absicht aufrufen
  • ListView mit klickbarem / editierbarem Widget
  • Android-Karte ohne Internet (offline)
  • Wie schalte ich aufListItemClick in Listactivity mit Schaltflächen in der Liste?
  • 2 Solutions collect form web for “Wie man Widget-Größenänderungen auf Geräten fängt, wo onAppWidgetOptionsChanged nicht angerufen wird?”

    Ich führe Frankishs Antwort hinzu, wie ich damit umgehebe, diese Sendung zu erhalten:

    @Override public void onReceive(Context context, Intent intent) { // Handle TouchWiz if(intent.getAction().contentEquals("com.sec.android.widgetapp.APPWIDGET_RESIZE")) { handleTouchWiz(context, intent); } super.onReceive(context, intent); } private void handleTouchWiz(Context context, Intent intent) { AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); int appWidgetId = intent.getIntExtra("widgetId", 0); int widgetSpanX = intent.getIntExtra("widgetspanx", 0); int widgetSpanY = intent.getIntExtra("widgetspany", 0); if(appWidgetId > 0 && widgetSpanX > 0 && widgetSpanY > 0) { Bundle newOptions = new Bundle(); // We have to convert these numbers for future use newOptions.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT, widgetSpanY * 74); newOptions.putInt(AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH, widgetSpanX * 74); onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions); } } 

    Möglicherweise müssen Sie ändern, wie Sie dieses Bündel behandeln, wenn Sie MAX_HEIGHT oder MAX_WIDTH verwenden, was ich nicht bin.

    Ich habe entdeckt, dass du die RESIZE-Aktion in onReceive-Funktion fangen kannst.

     if(intent.getAction().contentEquals("com.sec.android.widgetapp.APPWIDGET_RESIZE")) 

    Du erhältst die folgenden Werte aus dem BeExtras () Bündel dieser Absicht:

     int appWidgetId = bundle.getInt("widgetId"); // bundle.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); int widgetSpanX = bundle.getInt("widgetspanx", 4); int widgetSpanY = bundle.getInt("widgetspany", 1); 

    Jetzt können Sie diese Werte verwenden, um die Ansicht zu aktualisieren oder sie in einer statischen Integer-Map-Variable zu speichern, die im nächsten OnUpdate verwendet werden soll.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.