以编程方式将TextView添加到主屏幕小部件

kkg*_*ery 4 layout android widget remoteview

我想以编程方式将文本视图控件添加到我的主屏幕小部件.在下面的示例中,我使用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)

Set*_*eth 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" />
Run Code Online (Sandbox Code Playgroud)

您现在刚刚创建了一个布局,其根视图是文本视图.

现在,在您的代码中,您可以向此文本视图添加文本,如下所示:

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);
Run Code Online (Sandbox Code Playgroud)

现在你刚刚创建了三个textViews,文本为"TextView number 0",依此类推......

我确定在其他地方有类似的答案,但这是如何以编程方式将textViews添加到appWidget.

RemoteViews API


kkg*_*ery 5

好的,appwidget 是不可能的。只接受 xml 资源。