我想在运行时将以线性布局排列的文本视图添加到我的小部件中.我这样做:
LinearLayout l = new LinearLayout(context);
for (int i = 0; i < 10; i++) {
TextView t = new TextView(context);
t.setText("Hello");
l.addView(t); }
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
RemoteViews view = new RemoteViews (context.getPackageName(), l.getId());
views.addView(R.layout.main, view);
Run Code Online (Sandbox Code Playgroud)
但是当我添加小部件时,我得到一个问题加载小部件错误.似乎RemoteViews接收构造的视图id作为参数有问题.但我无法引用XML资源,因为它们是在运行时创建的.在运行时填充RemoteViewswith 的正确方法是什么TextViews?
我在首选项屏幕中创建了一个首选项,如下所示:
<PreferenceScreen>
<Preference
android:title="title"
android:key="key"
android:widgetLayout="@layout/someview"/>
</PreferenceScreen>
Run Code Online (Sandbox Code Playgroud)
在这里,我设置了一个widgetlayout资源,该资源应显示在首选项的右侧(如复选框首选项的复选框).我也可以在我的代码中设置这个资源PreferenceActivity.onCreate():
Preference myPreference = findPreference("key");
myPreference.setWidgetLayoutResource(R.layout.someview);
Run Code Online (Sandbox Code Playgroud)
这两种方法都可以正常工作,因此我可以在首选项的右侧看到我的资源.但是,我无法访问此资源(someview)以在运行时更改其属性.
既没有手动设置资源ID,也没有从资源中膨胀或findViewById似乎工作 - 我找不到资源/资源ID无效的异常.似乎偏好活动稍后会使资源膨胀.
有没有人遇到同样的问题?有关如何widgetlayout在运行时更改资源属性的任何想法?
这是一个类似的问题,但没有回答
我想以编程方式将文本视图控件添加到我的主屏幕小部件.在下面的示例中,我使用TextViews填充Linearlayout,但是如何在此处使用RemoteView?它只接受xml资源布局作为参数.
public class MyWidget extends AppWidgetProvider {
public void onUpdate(Context _context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
LinearLayout l = new LinearLayout(_context);
for (int i = 0; i < 10; i++) {
TextView t = new TextView(_context);
t.setText("Hello");
l.addView(t);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我看到的所有教程都明确地使用其预定义控件的值填充RemoteViews对象.我想添加控制程序.
RemoteViews views = new RemoteViews(context.getPackageName(),
R.layout.my_widget);
views.setTextViewText(R.id.widget_control1, value1);
views.setTextViewText(R.id.widget_control2, value2);
Run Code Online (Sandbox Code Playgroud)