我正在尝试在Android设备旋转时启动一项新活动,但我甚至没有在模拟器中检测到旋转。
我已经阅读了Android: listen for Orientation change?处的帖子,而这一切似乎都很有道理,但它只是不起作用。
在我的清单中我有:
<activity
android:name=".MainActivity"
android:configChanges="orientation|screenSize"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
在我的mainActivity.java
我有:
@Override
public void onConfigurationChanged (Configuration newConfig) {
super.onConfigurationChanged(newConfig);
int orientation=newConfig.orientation;
switch(orientation) {
case Configuration.ORIENTATION_LANDSCAPE:
showMessage("landscape");
break;
case Configuration.ORIENTATION_PORTRAIT:
showMessage("portrait");
break;
}
}
这显然不会启动新的Activity,但我试图让方向检测首先工作(showMessage
只是调用Toast并在我的代码中的其他地方工作,所以这不是我没有看到的原因任何东西)。
当我在模拟器中运行并使用旋转按钮时,模拟器按预期旋转但我从未看过Toast ......
我哪里错了? (我根据配置常量的要求导入android.content.res.Configuration
。
答案 0 :(得分:1)
onConfigurationChanged
方法,实际上,由于这一行,不会调用任何内容:
android:screenOrientation="portrait"
设备只是以纵向模式锁定,删除此行,并且应调用onConfigurationChanged
方法。
如果您想检测设备是否已旋转并保持android:screenOrientation="portrait"
线,则可以使用加速计传感器。
答案 1 :(得分:0)
删除此行后尝试
android:configChanges="orientation|screenSize"
android:screenOrientation="portrait"
因为你在清单中锁定屏幕方向而你是 还会覆盖活动中的配置更改。