Добавление TextViews к виджету главного экрана программно - PullRequest
4 голосов
/ 13 февраля 2012

Я хочу программно добавить элементы управления Text Views в мой виджет главного экрана. В следующем примере я заполняю Linearlayout TextViews, но как мне здесь использовать RemoteViews? Он принимает только макет ресурса 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);

Ответы [ 3 ]

10 голосов
/ 18 ноября 2013

Наткнулся на этот вопрос в поиске моего собственного ответа, и хотя он не отвечает на мой вопрос, я подумал, что отвечу на этот вопрос.

Предполагая, что у вас уже есть файл макета для вашего виджета, 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);

Теперь вы только что создали три textView, все с текстом "TextView number 0" и т. д. *

Я уверен, что есть похожееответьте где-нибудь еще, но это как программно добавить textViews в appWidget.

RemoteViews API

4 голосов
/ 24 февраля 2012

ок, это невозможно для appwidgets. Принимаются только XML-ресурсы.

0 голосов
/ 13 февраля 2012

Вы можете попробовать это

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...