2012-02-13 25 views
4

ホームスクリーンウィジェットにテキストビューコントロールをプログラムで追加したいと考えています。次の例では、LinearlayoutにTextViewsを設定しますが、ここでRemoteViewをどのように使用しますか?パラメータとしてxmlリソースレイアウトのみを受け入れます。私が見たプログラムでホームスクリーンウィジェットにTextViewを追加する

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

を試みることができます。 xmlリソースのみが受け入れられます。

0

[OK]をクリックすると、それはappwidgetsは不可能である。この

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は、AppWidgetProviderではなく、Activitiesクラスに対して定義されています。また、ウィジェットアクティビティクラスから呼び出すと、新しいウィンドウ(アクティビティ)が作成され、そこにコントロールが移入されます。では、AppWidgetProviderを継承するクラスのUpdateメソッドからRemoteViewを呼び出す必要がありますか?または、何らかの形で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" /> 

これで、ルートビューをテキストビューとして作成しました。

今、あなたのコードでは、あなたがそうのように、このテキストビューにテキストを追加することができます

今、あなただけのテキストはように...

を「のTextView番号0」であるとして3 textViewsすべてを作成し
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); 

似たような答えがあるはずですが、プログラマチックにappWidgetにtextViewsを追加する方法です。

RemoteViews API

関連する問題