3

xml で id のプレフィックスを付ける代わりに、コードで特定のレイアウトを指定することは可能ですか? たとえば、3 つのレイアウトがあり、それぞれに「btn」という ID を持つボタンがあるとします。findViewById(R.id.btn) でどのレイアウトを指定することは可能ですか?

4

4 に答える 4

4

基本的なコンテキストは を介し​​て定義されsetContentView(R.lyaout.my_layout)ます。get レイアウト オブジェクトを使用して別のレイアウトをインフレートする場合LayoutInflater.inflate()は、それを と呼びましょうbuttonLayout。と を区別できるようにthis.findViewById(R.id.button)なりbuttonLayout.findViewById(R.id.button)、両方で異なるボタン参照が得られます。

于 2012-06-18T22:20:05.217 に答える
3

findViewByIdViewクラスのメソッドです。そのようにビューを検索する場所を指定できます

final View container = new View(context); 
container.findViewById(R.id.btn);
于 2012-06-18T22:18:33.597 に答える
0

異なるビューグループ内にbtnsがある場合は可能ですが、ビューグループに別の名前を付ける必要があります。最も簡単なのは、その目的のために、アクティビティ内の独自のXML(つまり、button_layout.xml)内にボタンのレイアウトを定義することです。これを行うことができます。

public MyActivity extends Activity{

  Button btn1, btn2, btn3;

  public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);

    LinearLayout ll = new LinearLayout(this);
    setContentView(ll);

    btn1 = (Button)inflater.inflate(R.layout.button_layout, ll);
    btn2 = (Button)inflater.inflate(R.layout.button_layout, ll);
    btn3 = (Button)inflater.inflate(R.layout.button_layout, ll);

  }
}
于 2012-06-18T22:27:33.863 に答える
0

コンテンツ ビューが id を持つ複数のビューを持つ複雑な階層である場合btn、階層のサブツリーに移動し、そこから検索する必要があります。3 つのLinearLayoutビューがあり、それぞれにbtnビューが含まれているとします。LinearLayout最初に(ID、タグ、位置、またはその他の方法で) 正しいビューを選択できれば、正しいbtnビューを見つけることができます。関連する のLinearLayoutID が の場合branch1、たとえば:

View parent = findViewById(R.id.branch1); // Activity method
View btn = parent.findViewById(R.id.btn); // View method
于 2012-06-18T22:22:08.460 に答える