Android小部件不同的纵向和横向方向

Posted

技术标签:

【中文标题】Android小部件不同的纵向和横向方向【英文标题】:Android widget different portrait and landscape orientation 【发布时间】:2011-02-14 15:51:55 【问题描述】:

我有一个(希望是)一个相对简单的问题。如何在我的 AppWidget 上告诉 android 哪个布局用于纵向以及哪个布局用于横向?

提前致谢!

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

我以为他在谈论 appwidget 提供程序 XML 文件,您在其中声明了 minWidth 和 minHeight。根据您的说法,您会在 xml-land 中声明另一个提供者吗? 确认了我自己的问题。您可以给两个提供者一个在布局中,一个在布局域中,只有在该方向创建应用程序小部件时才会调用它们,而不会在方向更改时调用它们【参考方案2】:

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

【讨论】:

【参考方案3】:

如果您使用 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));

【讨论】:

以上是关于Android小部件不同的纵向和横向方向的主要内容,如果未能解决你的问题,请参考以下文章

设计 Android 小部件的宽度和高度

iOS 的自动布局能否重新排列 UI 小部件

一个视图控制器,纵向和横向两个视图

Qt半透明背景导致子小部件在父小部件中“印记”

处理略有不同的纵向和横向布局的单个 Android 布局 xml 文件?

Android:配置小部件(不同小部件实例的相同 setOnClickPendingIntent 附加功能)