我的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");

…其中“child”布局中TextView的id是textview。所以这是一个两阶段的方法,首先引用包含所需的ViewTextView,然后引用TextView
但是对于appwidgets,您必须通过TextView完成所有操作,而不是直接处理RemoteViews
所以不是:
TextView textView = (TextView)findViewById(viewId);
textView.setText("text");

你必须:
remoteViews.setTextViewText(viewId, "text");
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);

假设进入RemoteViews的接口是通过传递一个(直接)视图id来实现的,那么您将如何引用包含文件中的元素?

最佳答案

正如您所说的,您的视图仅随配置的更改而不同。假设您使用的是android studio,在gui设计工具中有一个名为go to next state的选项,通过使用这个选项,您可以生成layout land文件并根据需要对其进行配置,而且您不必更改id,因为android将决定使用哪个布局,所以您可以n使用相同的ID访问textView。如果要访问include标记中的任何视图。你可以用你给他们的身份证。我希望这对你有帮助。谢谢你

07-24 09:49
查看更多