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

jus*_*inl 5 xml layout android

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

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

SSZ*_*ero 13

您可以将布局放在一个xml文件中.你不想立即看到的那些,android:visibility="gone"在XML中设置,在运行时你会打电话给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>
Run Code Online (Sandbox Code Playgroud)

在运行时你可以这样做:

layout1.setVisibility(View.GONE);
layout2.setVisibility(View.VISIBLE);
Run Code Online (Sandbox Code Playgroud)

这基本上会创建布局交换的外观.

我相信如果你在两个布局之间共享对象,这也会有效.只需确保首先使用id android:id="@+id/view1"设置,然后设置此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>
Run Code Online (Sandbox Code Playgroud)

  • 我很喜欢这个答案。我个人使用ViewFlipper来管理多个布局,这样我就不必管理[Resource]变量的范围,因为它们的布局设置为内容视图。两种方法都是可行的。 (2认同)