疫情概要
8月1日0—24时,31个省(自治区、直辖市)和新疆生产建设兵团报告新增确诊病例49例,其中境外输入病例16例(四川4例,山东3例,湖北3例,广东2例,陕西2例,上海1例,福建1例),本土病例33例(新疆30例,辽宁3例);无新增死亡病例;无新增疑似病例。
前言
新的效果涂上,手机在竖屏界面上没有点击触发App切换到横屏的功能按钮,但是却又有横屏的效果图,并且可以通过返回按钮退出横屏。经过一番思考后有了可行的方案。本篇记录该需求的具体实现过程。如要查看关于横竖屏的详细设置介绍,请查看文章 Android 动态切换全屏横屏
思路
使用手机传感器检测设备方向 + 手动/自动设置屏幕方向
关于设备方向的监听,一般想到的是SensorManager
,但系统在SDK3内就添加了OrientationEventListener
抽象类来帮助监听设备方向。
再通过setRequestedOrientation (int requestedOrientation)
来强制指定方向。
详细过程
OrientationEventListener
public abstract class OrientationEventListener
extends Object
java.lang.Object | |
---|---|
↳ | android.view.OrientationEventListener |
Helper class for receiving notifications from the SensorManager when the orientation of the device has changed.
即:监听设备方向的帮助类。
虽然是以 Listener结尾,但它不是接口类型,是抽象类,内部封装了 SensorManager
相关的逻辑,用于监听设备当前角度,通过onOrientationChanged(int orientation)
方法返回。
注:记得调用OrientationEventListener.disable()
取消监听(注册),避免内存泄露。若需反复监听、取消操作,可通过OrientationEventListener.enable()
、OrientationEventListener.disable()
使监听有效/无效。
OrientationEventListener
相关实现类如下:
1 | /** |
setRequestedOrientation
Change the desired orientation of this activity. If the activity is currently in the foreground or otherwise impacting the screen orientation, the screen will immediately be changed (possibly causing the activity to be restarted). Otherwise, this will be used the next time the activity is visible.
Parameters | |
---|---|
requestedOrientation |
int : An orientation constant as used in ActivityInfo#screenOrientation . Value is android.content.pm.ActivityInfo.SCREEN_ORIENTATION_UNSET, ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED , ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE , ActivityInfo.SCREEN_ORIENTATION_PORTRAIT , ActivityInfo.SCREEN_ORIENTATION_USER , ActivityInfo.SCREEN_ORIENTATION_BEHIND , ActivityInfo.SCREEN_ORIENTATION_SENSOR , ActivityInfo.SCREEN_ORIENTATION_NOSENSOR , ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE , ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT , ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE , ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT , ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR , ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE , ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT , ActivityInfo.SCREEN_ORIENTATION_FULL_USER , or ActivityInfo.SCREEN_ORIENTATION_LOCKED |
即:改变活动方向。
另外配合使用setRequestedOrientation(int requestedOrientation)
进行强制横竖屏切换
完整示例
1 | public class SimpleActivity extends AppCompatActivity { |