21

Is it possible to have two different layouts for different cases in the same activity or do I have to use intent to call another activity with a different layout

4

5 回答 5

35

是的,有可能。您可以为单个活动使用尽可能多的布局,但显然不能同时使用。你可以使用类似的东西:

if (Case_A)
  setContentView(R.layout.layout1);

else if (Case_B)
  setContentView(R.layout.layout2);

等等...

于 2012-10-25T07:48:46.787 回答
12

是的,这也可以通过开关盒实现

我已经尝试过这段代码......

switch (condition) {
        case 1:  
    setContentView(R.layout.layout1);
                 break;
        case 2:  
    setContentView(R.layout.layout2);
                 break;
        case 3:  
    setContentView(R.layout.layout3);
                 break;

        default: 
    setContentView(R.layout.main);
                 break;
    }
于 2012-10-25T09:41:09.853 回答
4

我建议使用片段

如果您对片段不满意,如果您可以解释更多以找到其他解决方案,这将很有帮助

编辑

使用 android 支持库来支持较低的操作系统版本

编辑2

如果要使用两个 xml,可以将两个 xml 合二为一并使用它

<include layout="@layout/YOURXMLNAME1" />
<include layout="@layout/YOURXMLNAME2" />

这在许多情况下再次使用布局时也很有用

于 2012-10-25T07:48:54.967 回答
4

有很多方法可以解决这个问题。其他答案至少包括两种方法 - 根据情况使用 setContentView 和使用片段。我还想谈一谈。例如,您包含两个布局

<include
android:id = "@+id/layout1"
layout = .../>

<include
android:id = "@+id/layout2"
layout = ...
android:visibility = "gone"/>

在您的 java 代码中,您可以根据用例隐藏或显示您的布局。例如,将内容视图设置为显示上面的布局会显示 layout1。当用户单击下一个按钮时,您可以获得对 layout1 的引用并将其可见性设置为已消失,并将 layout2 的可见性设置为可见。

LinearLayout layout1 = findViewById(R.id.layout1);
LinearLayout layout2 = findViewById(R.id.layout2);

buttonNext.setOnClickListener(new View.OnClickListener()
{ 
layout1.setVisibility(View.GONE);
layout2.setVisibility(View.VISIBLE);
});
于 2018-05-02T08:58:34.230 回答
2

这是最适合您的解决方案ViewFlipper
ViewFlipper 是一个简单的 ViewAnimator,它将在添加到其中的两个或多个视图之间进行动画处理。一次只显示一个孩子。如果需要,可以定期在每个孩子之间自动翻转。 是取景器的好例子。
你也可以看看这个
编辑:-为您提供一个 StackoverFlow 答案

于 2012-10-25T07:58:51.327 回答