我是android的新手,我在学习基础知识时遇到了这个问题。
我在谷歌和这里搜索过我的问题,但找不到类似的问题。
我的问题是我无法检测到屏幕方向何时变为横向。
以下是我从here
获得的代码public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
System.out.println("orientation landscape");
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
System.out.println("orientation potrait");
} else{
Toast.makeText(this, "undefined", Toast.LENGTH_SHORT).show();
System.out.println("orientation undefined");
}
}
<activity android:name=".Hello2011Activity"
android:label="@string/app_name"
android:theme="@style/testem"
android:configChanges="orientation"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
这是日志
07-27 16:19:11.935: INFO/ActivityManager(52): Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/2 nav=3/1 orien=2 layout=18}
07-27 16:19:12.065: INFO/ActivityManager(52): Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/2 nav=3/1 orien=1 layout=18}
07-27 16:19:12.305: INFO/System.out(1241): orientation potrait
07-27 16:19:15.485: INFO/ActivityManager(52): Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/1 nav=3/1 orien=2 layout=18}
07-27 16:27:11.465: INFO/ActivityManager(52): Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/2 nav=3/1 orien=2 layout=18}
07-27 16:27:11.665: INFO/ActivityManager(52): Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/2 nav=3/1 orien=1 layout=18}
07-27 16:27:11.885: INFO/System.out(1241): orientation potrait
07-27 16:27:14.035: INFO/ActivityManager(52): Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/1 nav=3/1 orien=2 layout=18}
07-27 16:27:20.401: INFO/ActivityManager(52): Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/2 nav=3/1 orien=2 layout=18}
07-27 16:27:20.675: INFO/ActivityManager(52): Config changed: { scale=1.0 imsi=310/260 loc=en_US touch=3 keys=2/1/2 nav=3/1 orien=1 layout=18}
07-27 16:27:20.865: INFO/System.out(1241): orientation potrait
正如你所看到的那样,只有当我改变方向从横向更改为potrait时才会发出通知,反之亦然。
我已经尝试了apd级别为7的avd 2.1update1和api级别为8的avd 2.2。 操作系统是带有eclipse 3.6.2的windows xp sp 3。
这是一个错误还是代码有问题?
答案 0 :(得分:1)
我遇到了同样的问题,但使用方向| keyboardHidden并没有解决它。有人有想法吗?
编辑: 经过一些反复试验,我发现这对我有用:
android:configChanges="keyboardHidden|orientation|screenSize"
答案 1 :(得分:0)
我已将您的代码复制并粘贴到我的某个应用程序中,并且它可以正常运行。我看到了toast和sysouts的横向和纵向方向的变化。你在代码中做了什么吗?
答案 2 :(得分:0)
我找到了答案here。
使用
android:configChanges="orientation|keyboardHidden"
而不是
android:configChanges="orientation"
很抱歉没有彻底搜索。虽然我仍然想知道为什么我必须使用keyboardhidden来使它工作。 如果有人可以向我解释,我会很高兴:D
答案 3 :(得分:0)
activity-restart-on-rotation-android
是how-do-i-detect-screen-rotation并使用android:screenOrientation="portrait"
活动用于不改变方向(这可以与活动标签一起使用AndroidManifest.xml
),如下所示/ p>
<activity android:name="testActivity"
android:screenOrientation="portrait" android:label="@string/app_name">
(使用此设备后,设备在更改方向时没有意义)