3

除了在 xml 中添加 id 前缀,是否可以在代码中指定特定的布局?例如,如果我有 3 个布局,每个布局都有一个 id 为“btn”的按钮。是否可以指定 findViewById(R.id.btn) 的布局?

4

4 回答 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

findViewByIdView类的方法。您可以指定应该在哪里搜索视图

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 回答