2011-08-08 22 views
7

Tengo un widget de aplicación de Android y me gustaría ampliarlo para admitir varios tamaños y también re-considerable con Honeycomb.¿Cómo obtener el tamaño del widget de la aplicación?

El problema es que necesito saber cuál es el tamaño del widget, por lo que puedo saber cuánto contenido puedo poner en él.

¿Cómo leo el tamaño del widget de la aplicación?

No he podido encontrar nada.

Respuesta

13

sé que es cuestión de edad, pero hay una nueva respuesta a ella (que creo que no estaba disponible en el momento, ya que es la API de 16 en adelante solamente):

puede llamar:

Bundle options = appWidgetManager.getAppWidgetOptions(appWidgetId); 

que dará a las mismas opciones que se pasa a su receptor durante

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

con este Bundle opciones que se pueden consultar para el dimensionamiento usando las constantes:

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

Recordando que Samsung le gusta ser diferente, por lo que es probable que tenga un manejador especial para TouchWiz (código de abajo copiado directamente de mi aplicación):

@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

cómo se te ocurrió con widgetSpan * 74? Solo prueba y error? ¿Conoces el número majic para max_height? – schwiz

+0

lamentamos que 'handleTouchWiz' se haya copiado directamente de alguna otra respuesta SO. No tengo idea de dónde viene. – Budius

+0

Acaba de probarse en Galaxy S6, la intención nunca se recibe, pero onAppWidgetOptionsChanged se llama con parámetros válidos, por lo que Samsung parece haber solucionado esto. – user1806772

Cuestiones relacionadas