У меня есть (надеюсь) относительно простой вопрос. Как сообщить Android, какой макет использовать для портрета и какой макет использовать для альбомной ориентации на моем AppWidget?
Спасибо заранее!
У меня есть (надеюсь) относительно простой вопрос. Как сообщить Android, какой макет использовать для портрета и какой макет использовать для альбомной ориентации на моем AppWidget?
Спасибо заранее!
Во-первых, помните, что некоторые домашние экраны (например, Nexus One) не меняют ориентацию.
Стандартным подходом к разным макетам на ориентацию является установка портретной версии в res/layout/
и альбомной версии в res/layout-land/
, под тем же именем (например, appwidget.xml
). Затем просто обратитесь к нему по имени (например, R.layout.appwidget
), и Android выберет файл в зависимости от ориентации. Это определенно работает для действий, поэтому я бы предположил, что это работает для виджетов приложений, но я не думаю, что я действительно пробовал его.
Чтобы изменить ширину и высоту виджета приложения, определите два разных размера android:layout_height
и android:layout_width
для вашего макета (в res/layout-port
и res/layout-land
). Затем определите ширину и высоту больше в appwidgetinfo.xml
. Таким образом, виджет приложения изменяет размер при изменении ориентации, а не только при добавлении виджета на рабочий экран.
Если вы используете 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));
}