Android小部件在纵向和横向方向上的显示有何不同?

10
我有一个(希望)相对简单的问题。我如何告诉Android在我的AppWidget上使用哪种布局来处理竖屏和横屏方向?
提前感谢!
3个回答

19

首先,请记住,某些主屏幕(例如Nexus One)不会更改方向。

针对每个方向具有不同布局的标准方法是将纵向版本放在res/layout/中,而将横向版本放在res/layout-land/中,两者都使用相同的名称(例如appwidget.xml)。然后,只需按名称引用它(例如,R.layout.appwidget),Android会根据方向选择文件。这对于活动确实有效,因此我认为它适用于应用程序小部件,但我认为我实际上并没有尝试过。


2
我以为他在谈论的是AppWidget提供程序的XML文件,在那里你声明了minWidth和minHeight。根据你的说法,你要在XML领域中声明另一个提供程序吗? - Blundell
确认了我的问题。您可以提供两个布局,一个在layout中,另一个在layout land中,它们只会在创建appwidget时在该方向上调用,而不会在方向更改时调用。 - Blundell

2
要改变应用程序小部件的宽度和高度,请为您的布局(在res/layout-portres/layout-land中)定义两个不同的android:layout_heightandroid:layout_width大小。然后在您的appwidgetinfo.xml中定义更大的宽度和高度。这样,当方向改变时,应用程序小部件会改变大小,而不仅仅是在将小部件添加到主屏幕时。

0
如果您正在使用RemoteViews动态更新小部件,则可以向updateAppWidget函数调用提供两个单独的RemoteViews。例如:
@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));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接