是否可以在onCreate()中加载我的main.xml布局文件,然后在应用程序中加载,切换到新的XML布局?我以后尝试在应用程序中放置setContentView(),但这似乎并没有实际设置新的View,因为我对新设置的xml布局文件中的对象的引用返回为null。我尝试使用LayoutInflater进行一些布局膨胀,但我没有运气(我可能做错了)......
那么有没有其他方法可以在运行时交换布局xml布局? 谢谢!
答案 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)
,你可以重新膨胀一些东西。