LotusLoveNature

日常工作,生活小记

关于android屏幕旋转

跟屏幕相关的有,设置系统重力感应,设置屏幕状态,获得屏幕方向。

1. 系统重力感应可以理解为重力感应开关

screenchange = Settings.System.getInt(

activity.getContentResolver(),

Settings.System.ACCELEROMETER_ROTATION); 获得是否开启重力感应,1开启;

设置重力感应开关

Settings.System.putInt(

activity.getContentResolver(),

Settings.System.ACCELEROMETER_ROTATION, 0);

当设置了重力感应开关后,体现就是手机不能通过用户的手来切换手机屏幕时改变屏幕的方向,也就是拿着手机转会没有反应。设置重力感应开关是对用户的手起作用。

2. 设置屏幕状态

activity .setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER);

这个参数有多中形式,比如这里的user是获取当前的屏幕方向,即用户选择

这里还可以设置屏幕方向为竖屏,为横屏;即SCREEN_ORIENTATION_PORTRAIT和SCREEN_ORIENTATION_LANDSCAPE;

所以现在看看1和2的联系,当重力开关如果关着,设置屏幕状态有无反应了。事实证明对于SCREEN_ORIENTATION_PORTRAIT和SCREEN_ORIENTATION_LANDSCAPE是可以的。也就是说,即使重力感应开关是关着的,如果通过设置屏幕状态为强制竖屏,或者强制横屏,设置的当前是生效的,生效完后,屏幕依然不能感应旋转。但是试过SCREEN_ORIENTATION_USER是不生效的。

3. 获得屏幕方向,如果要获取强制竖屏,强制横屏这种特殊页面的屏幕状态,可以用getRequestedOrientation,而现在要获得一个user屏幕状态的当前屏幕方向。因为user屏幕状态下是可以旋转的,这个时候就需要用到

android.view.WindowManager manager = context.getSystemService(Context.WINDOW_SERVICE);

int rotation = manager.getDefaultDisplay().getRotation();

rotation的值为Surface.ROTATION_90或Surface.ROTATION_270时表示竖屏

rotation的值为Surface.ROTATION_0或者Surface.ROTATION_180表示横屏

所以我们可以再特定的情况下用上面的方法,比如屏蔽用户手操作手机的旋屏事件,我们可以禁止重力感应响应,这样什么oncreate,configchange是肯定不会执行了。

而强制横竖屏时就可以选择屏幕状态,强制横屏,强制竖屏不受重力感应的影响。而且自适应屏幕也可以通过设置屏幕状态来达成。

当需要获得当前屏幕的状态,如果是强制横屏,强制竖屏,直接通过get屏幕状态就可以。但是如果是自适应,要获取屏幕状态,我们可以通过getRotation来确定当前屏幕是竖屏还是横屏状态。




评论
©LotusLoveNature | Powered by LOFTER