我可以在运行时加载特定的布局吗?

时间:2013-04-24 12:25:58

标签: android

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}

如果我的orientation发生了更改,我不希望重新加载整个布局,而是要为纵向模式重新加载/重新创建特定的section/layout

更新

我把它放在我的mainifest =>里面android:configChanges="orientation|screenSize|keyboardHidden",因此不会再次重新创建整个活动。但我的活动中的某个部分需要与potrait and landscape模式不同。

5 个答案:

答案 0 :(得分:2)

使用include layout

例如

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width=”match_parent”
    android:layout_height=”match_parent”
    android:background="@color/app_bg"
    android:gravity="center_horizontal">

    <include layout="@layout/titlebar"/>

    <TextView android:layout_width=”match_parent”
              android:layout_height="wrap_content"
              android:text="@string/hello"
              android:padding="10dp" />

    ...

</LinearLayout>

现在在titlebarres/layout

中创建单独的res/layout-land版面

有关详情,请参阅Use the < include > Tag

答案 1 :(得分:1)

这是自动的。如果您创建一个文件夹layout-land并使用“相同名称”创建新布局(如果它在布局文件夹中的main.xml,那么它也应该是layout-land中的main.xml)。然后当android在面向更改为横向时重新创建布局时,它将加载layout-land文件夹下的一个。

进一步information

答案 2 :(得分:0)

我认为你应该让Android完成它的工作。当设备旋转时,Activity被销毁并重新创建。这意味着调用了onCreate。我将检查onCreate内的方向并选择正确的布局。

答案 3 :(得分:0)

我不完全理解您的问题,但是当方向发生变化时,您的整个活动将被销毁并重新加载,因此每个布局都会重新加载。

答案 4 :(得分:0)

无需使用onConfigchange()

res中创建两个布局文件夹。

layout_landlayout_port并将这些给定的xml放在这些layouts中。

在这里,您需要创建两个名称相同的layouts

1- layout_change

2- layout_change

在port中添加你想要的新变化。