2012-02-13 5 views
4

Я хочу программным образом добавить элементы управления 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

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

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); 
+0

Спасибо, я отредактировал мой вопрос немного, моя точка зрения, как я должен обрабатывать RemoteViews, так как кажется, управлять виджет раскладкой. Если я вызову setContentView (l), я должен также позвонить в RemoteViews? – kkgery

+0

Для этого вы этого не сделаете. –

+1

Кажется, что это не работает. SetContentView определен для класса Activities, а не для AppWidgetProvider. И если я вызываю его из класса Activity Activity, он создает новое окно (активность) и заполняет элементы управления там. Так что мне нужно вызвать RemoteViews из метода Update класса, расширяющего AppWidgetProvider? Или есть способ использовать setcontentview каким-то образом? – kkgery

9

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

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

Я уверен, что есть аналогичный ответ в другом месте, но это то, как программно добавить textViews в appWidget.

RemoteViews API

 Смежные вопросы

  • Нет связанных вопросов^_^