是否可以在Android运行时交换XML布局?

时间:2010-07-27 15:08:44

标签: android xml layout

是否可以在onCreate()中加载我的main.xml布局文件,然后在应用程序中加载,切换到新的XML布局?我以后尝试在应用程序中放置setContentView(),但这似乎并没有实际设置新的View,因为我对新设置的xml布局文件中的对象的引用返回为null。我尝试使用LayoutInflater进行一些布局膨胀,但我没有运气(我可能做错了)......

那么有没有其他方法可以在运行时交换布局xml布局? 谢谢!

3 个答案:

答案 0 :(得分:13)

您可以将布局放在一个xml文件中。您不希望立即看到的那些,在XML中设置android:visibility="gone",在运行时,您将调用hiddenView.setVisibility(View.VISIBLE);

您的XML看起来像这样:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">
    <LinearLayout android:id="@+id/layout1"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent">
    </LinearLayout>
    <LinearLayout android:id="@+id/layout2"
        android:visibility="gone"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent">
    </LinearLayout>
</RelativeLayout>

在运行时你可以这样做:

layout1.setVisibility(View.GONE);
layout2.setVisibility(View.VISIBLE);

这实际上会创建布局交换的外观。

我相信如果您在两个布局之间共享对象,这也会有效。只需确保首先使用android:id="@+id/view1"设置ID,然后在此ID的每个后续设置中android:id="@id/view1"(不使用+)。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">
    <LinearLayout android:id="@+id/layout1"
        android:layout_width="fill_parent">
        <View android:id="@+id/view1"/>
    </LinearLayout>
    <LinearLayout android:id="@+id/layout2"
        android:visibility="gone"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent">
         <View android:id="@id/view1"/>
    </LinearLayout>
</RelativeLayout>

答案 1 :(得分:1)

你不能只创建一个新活动吗?否则,我认为您可能希望从主容器中删除视图并重新构建UI代码。如果我记得很好的话,每个Activity只能调用一次setContentView ...

答案 2 :(得分:1)

我也认为这听起来像是你想要一个新的活动,但我相信如果你手动删除现有的视图,然后拨打getLayoutInflater().inflate(resourceId, rootViewGroup),你可以重新膨胀一些东西。