2010-05-01 17 views

Respuesta

19

Primero, tenga en cuenta que algunas pantallas de inicio (por ejemplo, Nexus One) no cambian de orientación.

El enfoque estándar por tener diferentes diseños por orientación es poner el retrato versión en res/layout/, y la versión paisaje en res/layout-land/, ambos bajo el mismo nombre (por ejemplo, appwidget.xml). Luego, solo haga referencia a él por su nombre (por ejemplo, R.layout.appwidget), y Android elegirá el archivo según la orientación. Esto definitivamente funciona para las actividades, así que supongo que funciona para widgets de aplicaciones, pero no creo que lo haya probado realmente.

+2

Funciona para appwidgets al igual que las actividades. –

+2

Pensé que estaba hablando sobre el archivo XML del proveedor de appwidget donde mencionas minWidth & minHeight. Por lo que dices, ¿declararías a otro proveedor en xml-land? – Blundell

+0

Confirmé mi propia pregunta. Puede asignar a dos proveedores uno en diseño y uno en diseño, solo se llamarán SI el appwidget se crea con esa orientación, no se les solicitará un cambio de orientación – Blundell

2

Para cambiar la anchura y la altura del widget aplicación, definir dos diferentes android:layout_height y android:layout_width tamaños para su diseño (en el res/layout-port y res/layout-land). Luego defina el mayor ancho y alto en su appwidgetinfo.xml. De esta forma, el widget de la aplicación cambia de tamaño cuando se cambia la orientación y no solo cuando se agrega el widget a la pantalla de inicio.

0

Si está utilizando RemoteViews para actualizar dinámicamente su widget, puede suministrar dos RemoteViews por separado a la llamada a la función updateAppWidget. Por ejemplo:

@Override 
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { 
    RemoteViews rvLandscape=new Remoteviews(context,R.layout.widget_landscape); 
    rvLandscape.addView(... 
    : 

    RemoteViews rvPortrait =new Remoteviews(context, R.layout.widget_portrait); 
    rvPortrait.addView(... 
    : 

    appWidgetManager.updateAppWidget(widgetId, new RemoteViews(rvLandscape, rvPortrait)); 
} 
Cuestiones relacionadas