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

android禁止屏幕自动旋转_在android程序中禁止屏幕旋转和避免重启Activity一 禁止屏幕随手机旋转变化 有时候我们希望让一个程序的界面始终保持在一个方向 不随手机方向旋转而变化 在 AndroidManif xml 的每一个需要禁止转向的 Activity 配置中加入 android screenOrient landscape 属性 landscape 横向

大家好,我是讯享网,很高兴认识大家。

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

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

在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来确定当前屏幕是竖屏还是横屏状态。

小讯
上一篇 2025-03-23 07:39
下一篇 2025-03-19 14:21

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/42775.html