1

レイアウトを拡張する (または動的に作成する) メソッドを作成し、特定のビュー (この場合は TextViews) を追加してから、レイアウトをビューとして戻すメソッドを作成することは可能ですか? (どういうわけか) メインに組み込むことができます。ネストのような他のクラスのレイアウトですが、要素を動的に追加しますか?

4

3 に答える 3

3

はい、LayoutInflaterクラスを使用して、既存のレイアウトを拡張できます。次のようになります。

public static View GetLayout(final Context c){
    final LayoutInflater inflater = LayoutInflater.from(c);
    final View v = inflater.inflate(R.layout.activity_main, null);

    //find the container where you want to insert your dynamic items
    final LinearLayout placeholder = (LinearLayout) v.findViewById(R.id.linearLayout1);

    //create the new textview
    final TextView text = new TextView(c);
    text.setText("Some text");

    placeholder.addView(text, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

    return v;

}

質問では、このビューを「他のクラス」に戻すように求められましたが、他の回答は同じクラスからそうしています。つまり、コンテキストがあることを意味します。別のクラスからこれを行うには、ここで行っているようにコンテキストを渡すか、他の方法 (インスタンス オブジェクトが必要な場合はコンストラクター呼び出しなど) を渡す必要があります。

于 2013-07-10T21:40:11.293 に答える
1

はい、可能です:

... onCreate()
  {
  setContentView(...);
  ViewGroup myContainer=(ViewGroup)findViewById(R.id.myContainer);
  View v=inflateMySpecialView();
  //=<set layoutParams for the view if needed
  myContainer.addView(v);
  }

public View inflateMySpecialView()
  {
  ViewGroup viewgroup=(ViewGroup ) getLayoutInflater().inflate(R.layout.my_custom_layout, null,false);
  //do some stuff with the inflated viewgroup.
  return viewgroup;
  }
于 2013-07-10T21:40:15.773 に答える