除了在 xml 中添加 id 前缀,是否可以在代码中指定特定的布局?例如,如果我有 3 个布局,每个布局都有一个 id 为“btn”的按钮。是否可以指定 findViewById(R.id.btn) 的布局?
问问题
8541 次
4 回答
4
基本上下文是通过定义的setContentView(R.lyaout.my_layout)
。如果你使用LayoutInflater.inflate()
你得到一个布局对象来膨胀另一个布局,让我们调用它buttonLayout
。您现在可以区分this.findViewById(R.id.button)
和buttonLayout.findViewById(R.id.button)
,两者都会给您不同的按钮参考。
于 2012-06-18T22:20:05.217 回答
3
findViewById
是View
类的方法。您可以指定应该在哪里搜索视图
final View container = new View(context);
container.findViewById(R.id.btn);
于 2012-06-18T22:18:33.597 回答
0
如果您的内容视图是一个复杂的层次结构,其中有多个具有 id 的视图btn
,您将需要导航到层次结构的子树并从那里搜索。假设您有三个LinearLayout
视图,每个btn
视图中的某个位置都有一个视图。如果您可以先选择正确的LinearLayout
(通过 id、tag、position 或其他方式),则可以找到正确的btn
视图。如果相关LinearLayout
的 id 为branch1
,例如:
View parent = findViewById(R.id.branch1); // Activity method
View btn = parent.findViewById(R.id.btn); // View method
于 2012-06-18T22:22:08.460 回答
0
如果你的 btns 在不同的视图组中,这是可能的,但需要给视图组一个不同的名称!为此,最简单的方法是在您的 Activity 中定义其自己的 XML(即 button_layout.xml)中的 Button 布局,您可以这样做:
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 回答