最近在做界面控制屏幕方向时,发现,调用了

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其他的代码}


更多相关文章

  1. 屏幕触点
  2. Android(安卓)软键盘盖住输入框或者布局的解决办法
  3. Android(安卓)通过wifi调试程序
  4. android 手机屏幕密度等级和屏幕逻辑尺寸
  5. 谷歌眼镜GDK开发指南之地理位置和传感器
  6. Android(安卓)使用根据手机屏幕来进行比例拉伸接口获取的照片
  7. Ionic Cordova实现软键盘的监听 以及操作大全
  8. 关于android双屏异显的一些总结和卡死的一些解决方法
  9. RelativeLayout(Android)中实现控件平分屏幕

随机推荐

  1. 安卓开发基础介绍
  2. 手机QQ桌面2.0(Android)发布:新增主题模式
  3. Android(安卓)ListView一些应该知道的事
  4. android利用post方式与web服务器通信
  5. Android中通过gradle脚本做的一些小事情
  6. Facebook Buck和xctool:针对Android和iOS
  7. [Android] 为Android安装BusyBox —— 完
  8. 【Unity3d】Unity5与Android交互通信(使用
  9. Android人脸识别app——基于Face++,MVP+Re
  10. [Android] ListView (普通列表控件) 的基