Виджеты для Android различной портретной и альбомной ориентации

У меня есть (надеюсь) относительно простой вопрос. Как сообщить Android, какой макет использовать для портрета и какой макет использовать для альбомной ориентации на моем AppWidget?

Спасибо заранее!

Ответ 1

Во-первых, помните, что некоторые домашние экраны (например, Nexus One) не меняют ориентацию.

Стандартным подходом к разным макетам на ориентацию является установка портретной версии в res/layout/ и альбомной версии в res/layout-land/, под тем же именем (например, appwidget.xml). Затем просто обратитесь к нему по имени (например, R.layout.appwidget), и Android выберет файл в зависимости от ориентации. Это определенно работает для действий, поэтому я бы предположил, что это работает для виджетов приложений, но я не думаю, что я действительно пробовал его.

Ответ 2

Чтобы изменить ширину и высоту виджета приложения, определите два разных размера android:layout_height и android:layout_width для вашего макета (в res/layout-port и res/layout-land). Затем определите ширину и высоту больше в appwidgetinfo.xml. Таким образом, виджет приложения изменяет размер при изменении ориентации, а не только при добавлении виджета на рабочий экран.

Ответ 3

Если вы используете RemoteViews для динамического обновления виджета, вы можете предоставить два отдельных элемента RemoteView для вызова функции updateAppWidget. Например:

@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));
}