android设置屏幕方向与自动感应切换
16lz
2021-01-26
最近在做界面控制屏幕方向时,发现,调用了
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
之后,屏幕的感应不起作用了。
最后,终于找到了解决办法:
OrientationEventListener
这个可以用来监听手机屏幕旋转的角度。
通过两个EventListener,对他们进行控制,就可以实现了。
核心代码如下(Activity中):
@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);//其他的代码.....//Step1:这个mLandOrientationListener来监听手机是否转到横屏状态mLandOrientationListener=newOrientationEventListener(this,SensorManager.SENSOR_DELAY_NORMAL){@OverridepublicvoidonOrientationChanged(intorientation){if((orientation<100&&orientation>80)//这里的||和&&不能弄错!!||(orientation<280&&orientation>260)){//Step5:启用系统sensor控制屏幕方向。setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);}}};mLandOrientationListener.disable();//这个mPortOrientationListener来监听手机是否转到竖屏状态mPortOrientationListener=newOrientationEventListener(this,SensorManager.SENSOR_DELAY_NORMAL){@OverridepublicvoidonOrientationChanged(intorientation){if((orientation<10||orientation>350)//这里的||和&&不能弄错!!||(orientation<190&&orientation>170)){setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);}}};mPortOrientationListener.disable();}publicvoidgoFullScreen(){//Step2:先禁止Listener的监听。防止在竖屏时点击,走到mPortOrientationListener中,然后会根据sensor,还是保持竖屏。这样我们的横屏请求就不会有效了。mPortOrientationListener.disable();mLandOrientationListener.disable();//Step3:设置屏幕为横屏setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);}publicvoidgoSmall(){mPortOrientationListener.disable();mLandOrientationListener.disable();setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);}@OverridepublicvoidonConfigurationChanged(ConfigurationnewConfig){super.onConfigurationChanged(newConfig);intorientation=newConfig.orientation;if(orientation==Configuration.ORIENTATION_PORTRAIT){mPortOrientationListener.enable();mLandOrientationListener.disable();}elseif(orientation==Configuration.ORIENTATION_LANDSCAPE){//Step4:当要求的方向是横屏时,将竖屏Listener关闭,将横屏Listener启用。//这样,当手机转到横屏方向的时候,启用sensor控制方向,进入Step5.mLandOrientationListener.enable();mPortOrientationListener.disable();}//TODO其他的代码}
更多相关文章
- 屏幕触点
- Android(安卓)软键盘盖住输入框或者布局的解决办法
- Android(安卓)通过wifi调试程序
- android 手机屏幕密度等级和屏幕逻辑尺寸
- 谷歌眼镜GDK开发指南之地理位置和传感器
- Android(安卓)使用根据手机屏幕来进行比例拉伸接口获取的照片
- Ionic Cordova实现软键盘的监听 以及操作大全
- 关于android双屏异显的一些总结和卡死的一些解决方法
- RelativeLayout(Android)中实现控件平分屏幕