我正在使用android:configChanges="orientation|keyboardHidden|screenSize"
,因此当屏幕旋转从横向变为纵向时,活动不会再次开始,反之亦然。
我有一些代码想法,所以我会解决我的问题,但无论如何我可以通过它检查onCreate()
活动的屏幕方向,尽管我正在使用带有方向的 confidChanges ???
4 回答
使用 Activity 的 onConfigurationChanged 方法。请参阅以下代码:
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();
}
}
您还必须在清单文件中编辑适当的元素以包含 android:configChanges 只需查看以下代码:
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
注意:对于 Android 3.2(API 级别 13)或更高版本,当设备在纵向和横向之间切换时,“屏幕尺寸”也会发生变化。因此,如果您想防止在为 API 级别 13 或更高级别开发时由于方向更改而导致运行时重新启动,您必须 decalare
android:configChanges="orientation|screenSize" for API level 13 or higher .
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int orient = display.getOrientation();
switch(orient) {
case Configuration.ORIENTATION_PORTRAIT:
if(!oAllow) {
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
break;
case Configuration.ORIENTATION_LANDSCAPE:
if(!oAllow) {
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
break;
}
}
您可以getResources().getConfiguration().orientation
在任何地方使用以了解屏幕的方向。
onConfigurationChanged(Configuration newConfig)
并且,在运行活动时覆盖以处理方向变化
更新:
来自文档:
在某些特殊情况下,您可能希望根据一种或多种类型的配置更改绕过重新启动活动。这是通过清单中的 android:configChanges 属性完成的。对于您说您在那里处理的任何类型的配置更改,您将收到对当前活动的 onConfigurationChanged(Configuration) 方法的调用,而不是重新启动。
请检查此项,它将检测屏幕方向,您无需在清单中提及它,您可以获得方向。
OrientationEventListener _orientaion = new OrientationEventListener(
MainActivity.this) {
@Override
public void onOrientationChanged(int arg0) {
System.out.println("Wortking");
}
};
_orientaion.enable();
我认为这会对你有所帮助。