200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > android禁止屏幕自动旋转_在android程序中禁止屏幕旋转和避免重启Activity

android禁止屏幕自动旋转_在android程序中禁止屏幕旋转和避免重启Activity

时间:2021-09-06 18:58:39

相关推荐

android禁止屏幕自动旋转_在android程序中禁止屏幕旋转和避免重启Activity

(一)禁止屏幕随手机旋转变化:

有时候我们希望让一个程序的界面始终保持在一个方向,不随手机方向旋转而变化:

在AndroidManifest.xml的每一个需要禁止转向的Activity配置中加入android:screenOrientation=”landscape”属性。

landscape = 横向

portrait = 纵向

避免在转屏时重启ACTIVITY

android中每次屏幕方向切换时都会重启Activity,所以应该在Activity销毁前保存当前活动的状态,在Activity再次

Create的时候载入配置,那样,进行中的游戏就不会自动重启了!

要避免在转屏时重启Activity,可以通过在AndroidManifest.xml文件中重新定义方向(给每个Activity加上android:configChanges=”keyboardHidden|orientation”属性)。

在需要控制屏幕显示方向的Activity中重写onConfigurationChanged(Configuration

newConfig)方法,这样在转屏时就不会重启Activity了。

(二)关于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来确定当前屏幕是竖屏还是横屏状态。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。