在AppWidget的情况下重用布局

drm*_*wer 6 android android-layout android-appwidget

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

所以,不要多次重复相同的东西(我讨厌重复),我想我会通过重新使用布局来<include/>尝试整理一些东西.

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

在"父"布局中:

<include layout="@layout/my_layout" android:id="@+id/textview_layout" />
Run Code Online (Sandbox Code Playgroud)

在代码中:

TextView tv = (TextView)findViewById(R.id.textview_layout).findViewById(R.id.textview);
tv.setText("test");
Run Code Online (Sandbox Code Playgroud)

... TextView"子"布局中的ID的位置textview.所以这是一个两阶段的方法,你首先引用View包含TextView你想要的东西,然后引用TextView它.

但是对于AppWidgets而言,不是直接与之交易,而是TextView必须通过一切来做RemoteViews.

所以代替:

TextView textView = (TextView)findViewById(viewId);
textView.setText("text");
Run Code Online (Sandbox Code Playgroud)

你必须这样做:

remoteViews.setTextViewText(viewId, "text");
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
Run Code Online (Sandbox Code Playgroud)

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

Sum*_*ois -1

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