0

我有一个 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,我不想实现两次逻辑)?

多谢!

4

1 回答 1

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,而是在一些用户输入之后),您总是可以从布局中删除按钮,并为一个新的随机选择的按钮充气。

希望这可以帮助!

于 2012-04-28T15:59:05.363 回答