0
@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模式而异。

4

5 回答 5

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>

现在在和中创建单独titlebar的布局res/layoutres/layout-land

有关更多信息,请参阅使用 <include> 标记

于 2013-04-24T12:32:59.510 回答
1

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

如需更多信息

于 2013-04-24T12:33:28.297 回答
0

无需使用onConfigchange().

中创建两个布局文件夹res

layout_land并将layout_port这些给定的 xml 放在这些layouts.

在这里你需要创建两个layouts同名的

1-layout_change

2-layout_change

在端口中添加您想要的新更改。

于 2013-04-24T12:32:44.957 回答
0

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

于 2013-04-24T12:28:20.403 回答
0

我不完全理解你的问题,但是当方向改变时,你的整个活动将被破坏并重新加载,所以每个布局都会被重新加载。

于 2013-04-24T12:28:41.117 回答