xml で id のプレフィックスを付ける代わりに、コードで特定のレイアウトを指定することは可能ですか? たとえば、3 つのレイアウトがあり、それぞれに「btn」という ID を持つボタンがあるとします。findViewById(R.id.btn) でどのレイアウトを指定することは可能ですか?
4 に答える
基本的なコンテキストは を介して定義されsetContentView(R.lyaout.my_layout)
ます。get レイアウト オブジェクトを使用して別のレイアウトをインフレートする場合LayoutInflater.inflate()
は、それを と呼びましょうbuttonLayout
。と を区別できるようにthis.findViewById(R.id.button)
なりbuttonLayout.findViewById(R.id.button)
、両方で異なるボタン参照が得られます。
findViewById
View
クラスのメソッドです。そのようにビューを検索する場所を指定できます
final View container = new View(context);
container.findViewById(R.id.btn);
異なるビューグループ内に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);
}
}
コンテンツ ビューが id を持つ複数のビューを持つ複雑な階層である場合btn
、階層のサブツリーに移動し、そこから検索する必要があります。3 つのLinearLayout
ビューがあり、それぞれにbtn
ビューが含まれているとします。LinearLayout
最初に(ID、タグ、位置、またはその他の方法で) 正しいビューを選択できれば、正しいbtn
ビューを見つけることができます。関連する のLinearLayout
ID が の場合branch1
、たとえば:
View parent = findViewById(R.id.branch1); // Activity method
View btn = parent.findViewById(R.id.btn); // View method