方向更改时应用程序关闭而没有任何错误

时间:2015-09-01 10:08:04

标签: android android-layout android-orientation

我为肖像和风景创建了两种不同的布局 layout.xml在layout用于纵向模式,在layout-land它在某些设备上工作正常但是当我在一些低配置设备中运行该应用程序两次或三次更改方向后应用程序关闭没有任何错误。

我还在AndroidManifest.xml中包含了android:configChanges="orientation|keyboardHidden"

P.S。有一个活动有两个xml的肖像和风景,活动包含一个片段,有两个xml的肖像和风景。

修改 onCreate我的代码在这里:

protected void onCreate(Bundle savedInstanceState) {


    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    View v = findViewById(R.id.home_view);
    v.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);


    initViews();

    if (savedInstanceState != null) {

        //maintaining state
    }

}

2 个答案:

答案 0 :(得分:1)

首先,像其他人一样指出,仅使用"orientation|keyboardHidden"是不够的

您还必须使用screenSize ..

android:configChanges="orientation|keyboardHidden|screenSize"

在您的活动中..您必须覆盖onConfigurationChanged(Configuration newConfig)方法..

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

    setContentView(R.layout.activity_main);
    initViews();  // initialize your views again..

}

答案 1 :(得分:0)

警告:从Android 3.2(API级别13)开始,"屏幕大小"当设备在纵向和横向之间切换时也会发生变化。因此,如果要在开发API级别13或更高级别(由minSdkVersion和targetSdkVersion属性声明)时由于方向更改而阻止运行时重新启动,则必须包含" screenSize"价值以及"方向"值。也就是说,你必须decalare android:configChanges =" orientation | screenSize"。但是,如果您的应用程序的目标是API级别12或更低,那么您的活动始终会自行处理此配置更改(即使在Android 3.2或更高版本的设备上运行,此配置更改也不会重新启动您的活动。)