@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
模式不同。
答案 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>
现在在titlebar
和res/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_land
和layout_port
并将这些给定的xml放在这些layouts
中。
在这里,您需要创建两个名称相同的layouts
1- layout_change
2- layout_change
在port中添加你想要的新变化。