【问题标题】:Re-using layouts in the case of an AppWidget在 AppWidget 的情况下重用布局
【发布时间】:2016-02-18 08:38:51
【问题描述】:

我的AppWidget 有几个非常相似的布局,实际上只是TextView 元素之一的旋转不同(我根据屏幕方向选择适当的布局)。

因此,与其多次重复相同的内容(我讨厌重复),我想我会尝试通过Re-using Layouts with <include/> 整理内容。

当我试图通过 ID 引用布局的特定元素时,问题就出现了。元素在包含的布局 xml 中的位置,对于 -AppWidget 布局,我使用了描述为 here 的方法,其中使用了两层方法...

在“父”布局中:

<include layout="@layout/my_layout" android:id="@+id/textview_layout" />

在代码中:

TextView tv = (TextView)findViewById(R.id.textview_layout).findViewById(R.id.textview);
tv.setText("test");

...其中“子”布局中TextView 的ID 是textview。所以这是一个两阶段的方法,你首先引用包含你想要的TextViewView,然后引用TextView

但是对于 AppWidgets,不是直接与TextView 打交道,你必须通过RemoteViews 来做所有事情。

所以而不是:

TextView textView = (TextView)findViewById(viewId);
textView.setText("text");

你必须这样做:

remoteViews.setTextViewText(viewId, "text");
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);

鉴于RemoteViews 的接口是通过传入单个(直接)视图ID,您将如何引用包含文件中的元素?

【问题讨论】:

    标签: android android-layout android-appwidget


    【解决方案1】:

    正如您所说,您的观点仅因配置更改而异。假设您使用的是 Android Studio,在 GUI Designing Tool 中有一个名为 Go to next State 的选项,通过使用它您可以生成 layout-land 文件并像您一样配置它想要它,而且您没有更改 id,因为 android 将决定它将使用哪种布局,因此您可以使用相同的 id 访问您的 TextView。如果您想访问包含标签中的任何视图。你可以只使用你给他们的id。我希望这是有帮助的。谢谢你

    【讨论】:

    • 谢谢。我假设这是为了让操作系统可以根据屏幕方向自动选择适当的布局?不幸的是,在我的情况下,它并不是那么简单,因为即使屏幕是例如固定在纵向,我需要根据小部件的尺寸在不同的布局之间切换(如果小部件又高又窄,布局将被旋转......作为用户选项)。
    • 如果是这种情况,您可以通过编程方式设置它,这很容易,请查看一些教程。你也可以使用我认为更适合你的片段。谢谢你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    相关资源
    最近更新 更多