我有一个任务,我必须将设备(非活动)方向转换为4个值(LANDSCAPE,PORTRAIT,LANDSCAPE_REVERTED和PORTRAIT_REVERTED)。我提出了一个解决方案,但它使用了固定值,并不代表Android如何以及何时更改活动方向的功能。
我无法找到一个api,可以轻松通知听众设备何时将其方向更改为指定的4个值。
如果有人可以分享android如何计算方向的功能并通知WindowManager改变活动的方向,那将是不错的。
[解决] 的 对于谁可能最终与我相同的情况。 框架/碱/核心/ JAVA /机器人/视图/ WindowOrientationListener.java
此侦听器包含通知活动改变其方向的所有魔法。
答案 0 :(得分:1)
在onConfigChanges()中,只要您的屏幕方向发生变化,您就会立即得到通知,并且您可以随时获得您的屏幕方向:
Display getOrient = getWindowManager().getDefaultDisplay();
switch(orientation){
case Configuration.ORIENTATION_LANDSCAPE:
Log.e();
break;
case Configuration.ORIENTATION_PORTRAIT:
Log.e();
break;
}
答案 1 :(得分:0)
使用项目清单中的screenOrientation并设置方向。
<activity
android:name=".SplashScreen"
android:screenOrientation="portrait"
</activity>
答案 2 :(得分:0)
如果您希望活动以横向模式显示和对齐,则在drawable中添加文件夹即layout-landscape,如果您希望应用程序仅在纵向模式下运行,则在清单中声明如下
android:screenOrientation="portrait"
或您想要在横向模式中
android:screenOrientation="landscape"
答案 3 :(得分:0)
我很确定OS会计算设备的旋转并在旋转角度改变60度时改变方向。因此,如果设备处于纵向方向且旋转角度等于0,则当设备旋转时表示逆时针旋转,旋转角度将增加,当旋转角度约为60度时,OS将变为横向。现在假设当您顺时针旋转设备时设备处于横向方向,角度将减小,并且在大约30度时操作系统将更改为纵向方向。
方向改变状态
左侧是当前方向
右侧是设备旋转时的新方向
肖像---&gt; <逆时针旋转旋转角度> 60个
肖像---&gt; Landscape_Reverse 旋转顺时针旋转角度&lt; -60
风景---&gt;纵向旋转顺时针旋转角度&lt; 30个
风景---&gt;
Landscape_Reverse ---&gt; <纵向旋转逆时针旋转角度> -30
Landscape_Reverse ---&gt; Portrait_Reverse 旋转顺时针旋转角度&lt; -150
当设备平放时,无法计算旋转角度。这就是为什么如果您在设备平放并且旋转设备时启动应用程序,则不会发生方向更改 您可以在我How to measure the tilt of the phone in XY plane using accelerometer in Android
的答案中查看如何计算旋转角度答案 4 :(得分:0)
使用 getRotation()
Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int rotation = display.getRotation();
来自文档
从“自然”方向返回屏幕的旋转。该 返回值可能是Surface.ROTATION_0(无旋转), Surface.ROTATION_90,Surface.ROTATION_180或Surface.ROTATION_270。 例如,如果设备具有自然高的屏幕,并且用户具有 把它转向侧面进入横向,价值 这里返回的可能是Surface.ROTATION_90或 Surface.ROTATION_270取决于它的转动方向。该 angle是屏幕上绘制图形的旋转,即 与设备物理旋转相反的方向。对于 例如,如果设备逆时针旋转90度,则为 补偿渲染将顺时针旋转90度 这里返回的值是Surface.ROTATION_90。