2011-08-08 10 views
7

Mam widżet aplikacji na Androida i chciałbym go rozszerzyć, aby obsługiwał kilka rozmiarów, a także ponownie zmienił się w Honeycomb.Jak uzyskać rozmiar widgetu aplikacji?

Problem polega na tym, że muszę wiedzieć, jaki jest rozmiar widżetu, więc wiem, ile treści mogę w nim umieścić.

Jak mogę odczytać rozmiar widgetu aplikacji?

Nie mogłem znaleźć niczego.

Odpowiedz

13

Wiem, że to stare pytanie, ale istnieje nowsza odpowiedź na to (to wierzę, nie było dostępne w czasie, jak to jest API 16 i aż tylko):

można nazwać:

Bundle options = appWidgetManager.getAppWidgetOptions(appWidgetId); 

które dadzą takie same opcje, które są przekazywane do odbiornika podczas

public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) 

z tego Bundle opcji można wyszukać do zaklejania przy użyciu stałych:

AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT 
AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH 
AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT 
AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH 

Pamiętając, że Samsung lubi być różne, więc prawdopodobnie trzeba specjalnego Handler dla TouchWiz (kod poniżej skopiowane bezpośrednio z mojego app):

@Override 
public void onReceive(Context context, Intent intent) { 
    if (intent == null || intent.getAction() == null) 
    return; 
    // I FUCKING HATE SAMSUNG! 
    if (intent.getAction().contentEquals("com.sec.android.widgetapp.APPWIDGET_RESIZE") && 
    Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { 
    handleTouchWiz(context, intent); 
    } 
    super.onReceive(context, intent); 
} 

@TargetApi(16) 
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); 
    } 
} 
+1

jak wpadłeś z widgetSpan * 74? Tylko próba i błąd? Czy znasz numer majic na max_height? – schwiz

+0

Niestety, 'handleTouchWiz' został bezpośrednio skopiowany z innej odpowiedzi SO. Nie mam pojęcia, skąd pochodzi. – Budius

+0

Po prostu przetestowane na Galaxy S6, intencje nigdy nie zostały odebrane, ale onAppWidgetOptionsChanged jest wywoływane z prawidłowymi parametrami, więc wydaje się, że Samsung to naprawił. – user1806772