是否可以在代码中指定特定的布局,而不是在xml中为id添加前缀?例如,如果我有3个布局,每个布局都有一个id为“btn”的按钮。是否可以在?
中指定findViewById(R.id.btn)的布局答案 0 :(得分:3)
findViewById
是View
类的方法。您可以指定应该搜索视图的位置
final View container = new View(context);
container.findViewById(R.id.btn);
答案 1 :(得分:2)
基本上下文是通过setContentView(R.lyaout.my_layout)
定义的。如果您使用LayoutInflater.inflate()
为另一个布局充气,则会获得一个布局对象,我们可以将其称为buttonLayout
。您现在可以在this.findViewById(R.id.button)
和buttonLayout.findViewById(R.id.button)
之间进行区分,并且两者都会为您提供不同的按钮参考。
答案 2 :(得分:0)
如果您的内容视图是具有多个ID为btn
的视图的复杂层次结构,则需要导航到层次结构的子树并从那里进行搜索。假设您有三个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
答案 3 :(得分:0)
如果您的btns位于不同的Viewgroups中,则可以,但需要为ViewGroups提供不同的名称!最简单的就是为此目的在自己的XML中定义Button的布局(即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);
}
}