在Android应用程序中动态选择视图

时间:2012-04-28 15:09:26

标签: android android-layout view

我有一个Android应用程序,我希望它有两个彼此相似的视图。 例如:

    <Button
    android:id="@+id/ok"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:text="OK" />

    <Button
    android:id="@+id/ok"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="OK" />

请注意,唯一的变化是我删除了centerHorizo​​ntal线。但这是一个简化的例子。

现在,我想创建一个应用程序,有时(使用随机函数)使用视图A,有时使用视图B.

是否可以在运行时执行此“视图切换”? 是否可以使用两个视图构建此应用程序(请注意该按钮应具有相同的ID,我不想实现两次逻辑)?

非常感谢!

1 个答案:

答案 0 :(得分:0)

我想象的唯一方法是:

  • 将每个按钮放在自己的布局文件中。
  • 根据您的功能结果对相应的内容进行充气。
  • 将其附加到视图中。

示例代码:

<强> button_a.xml:

<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ok"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:text="OK" />

<强> button_b.xml:

<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/ok"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="OK_2" />

您的活动:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    LayoutInflater inflater = LayoutInflater.from(this);

    Button button;

    if (Math.random() > 0.5) {
        button = (Button) inflater.inflate(R.layout.button_a, null);
    } else {
        button = (Button) inflater.inflate(R.layout.button_b, null);
    }

    /* ...
       Set listeners to the button and other stuff 
       ...
    */

    //find the view to wich you want to append the button
    LinearLayout view = (LinearLayout) this.findViewById(R.id.linearLayout1);

    //append the button
    view.addView(button);
}

如果您希望动态发生这种情况(即不在onCreate中,但在用户输入之后),您可以随时从布局中删除该按钮,并为随机选择的新按钮充气。

希望这有帮助!