方向改变时应用程序关闭且没有任何错误
Application closes without any Error when orientation changes
我已经为纵向和横向创建了两种不同的布局
layout.xml 在 layout
中用于纵向模式,在 layout-land
中它在某些设备上工作正常但是当我 运行 在一些低配置设备中应用两到三次后改变应用程序关闭的方向而不给出任何类型的错误。
我还在 AndroidManifest.xml
中包含了 android:configChanges="orientation|keyboardHidden"
P.S。有一个 activity 有两个 xml 用于纵向和横向,activity 包含一个片段有两个 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
}
}
首先就像其他人指出的那样,仅使用 "orientation|keyboardHidden"
是不够的
你也必须使用 screenSize
..
android:configChanges="orientation|keyboardHidden|screenSize"
并且在你的 activity.. 你必须覆盖 onConfigurationChanged(Configuration newConfig)
方法..
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.activity_main);
initViews(); // initialize your views again..
}
注意:从 Android 3.2(API 级别 13)开始,当设备在纵向和横向之间切换时,"screen size" 也会发生变化。因此,如果要防止在为 API 级别 13 或更高级别(由 minSdkVersion 和 targetSdkVersion 属性声明)开发时由于方向更改而导致运行时重新启动,除了"orientation" 值。也就是说,你必须decalare android:configChanges="orientation|screenSize"。但是,如果您的应用程序目标 API 级别 12 或更低,那么您的 activity 始终会自行处理此配置更改(此配置更改不会重新启动您的 activity,即使 运行在 Android 3.2 或更高版本的设备上)。
我已经为纵向和横向创建了两种不同的布局
layout.xml 在 layout
中用于纵向模式,在 layout-land
中它在某些设备上工作正常但是当我 运行 在一些低配置设备中应用两到三次后改变应用程序关闭的方向而不给出任何类型的错误。
我还在 AndroidManifest.xml
中包含了android:configChanges="orientation|keyboardHidden"
P.S。有一个 activity 有两个 xml 用于纵向和横向,activity 包含一个片段有两个 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
}
}
首先就像其他人指出的那样,仅使用 "orientation|keyboardHidden"
是不够的
你也必须使用 screenSize
..
android:configChanges="orientation|keyboardHidden|screenSize"
并且在你的 activity.. 你必须覆盖 onConfigurationChanged(Configuration newConfig)
方法..
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setContentView(R.layout.activity_main);
initViews(); // initialize your views again..
}
注意:从 Android 3.2(API 级别 13)开始,当设备在纵向和横向之间切换时,"screen size" 也会发生变化。因此,如果要防止在为 API 级别 13 或更高级别(由 minSdkVersion 和 targetSdkVersion 属性声明)开发时由于方向更改而导致运行时重新启动,除了"orientation" 值。也就是说,你必须decalare android:configChanges="orientation|screenSize"。但是,如果您的应用程序目标 API 级别 12 或更低,那么您的 activity 始终会自行处理此配置更改(此配置更改不会重新启动您的 activity,即使 运行在 Android 3.2 或更高版本的设备上)。