我想以编程方式将Text Views控件添加到我的主屏幕小部件中。在下面的示例中,我使用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);
}
}
}
我看到的所有教程都明确地使用其预定义控件的值填充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);
答案 0 :(得分:10)
在寻找我自己的答案时偶然发现了这个问题,虽然这不能回答我的问题,但我想我会回答这个问题。
假设您已经拥有了小部件的布局文件test.xml
。
现在,创建一个新的布局,例如,到text_view_layout.xml
。在那个布局中,xml将其作为内容:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView"
android:textAppearance="?android:attr/textAppearanceLarge" />
您现在刚刚创建了一个布局,其根视图是文本视图。
现在,在您的代码中,您可以将文本添加到此文本视图中,如下所示:
RemoteViews update = new RemoteViews(getPackageName(), R.layout.test);
for(int i = 0; i < 3; i++) {
RemoteViews textView = new RemoteViews(getPackageName(), R.layout.text_view_layout);
textView.setTextViewText(R.id.textView1, "TextView number " + String.valueOf(i));
update.addView(R.id.linearLayout1, textView);
}
mAppWidgetManager.updateAppWidget(mAppWidgetId, update);
现在你刚刚创建了三个textViews,文本为“TextView number 0”,依此类推......
我确信在其他地方有类似的答案,但这是如何以编程方式将textViews添加到appWidget。
答案 1 :(得分:4)
好的,appwidgets是不可能的。只接受xml资源。
答案 2 :(得分:0)
你可以试试这个
LinearLayout l = new LinearLayout(_context);
for (int i = 0; i < 10; i++) {
TextView t = new TextView(this);
t.setText("Hello");
t.setBackgroundColor(Color.RED);
t.setSingleLine(true);
l.addView(t);
}
l.setId(100)
RemoteViews views = new RemoteViews(context.getPackageName(),100);
views.setTextViewText(R.id.widget_control1, value1);
views.setTextViewText(R.id.widget_control2, value2);