Android 锁定屏幕方向 横向或竖向 支持Android10

Android 锁定屏幕方向 横向或竖向 支持Android10

前言

显然,你应该知道百度搜出来的锁定屏幕方向的教程都太老了,在Android10 上完全没有用,或者屏幕会闪一下,非常的蛋疼。

解决方法

测试设备
红米K20 -Android 10
荣耀20 -Android10

测试结果
完美

自定义style

首先,当然是自定义我们的Style

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <!-- 状态栏文字颜色变成白(false)/(true)色,非沉浸式 -->
        <item name="android:windowLightStatusBar" tools:targetApi="m">false</item>
        <!-- 锁定布局在发生以下改变时,不重置状态 -->
        <item name="android:configChanges">orientation|keyboardHidden|screenSize</item>
        <!-- 锁定布局方向,没有效果(可以删除) -->
        <item name="android:screenOrientation">locked</item>
    </style>

重点在于下面这一句

        <!-- 锁定布局在发生以下改变时,不重置状态 -->
        <item name="android:configChanges">orientation|keyboardHidden|screenSize</item>

修改Activity

在Activity的onCreate中做以下修改(当然最好是在BaseActivity中做修改)

    @SuppressLint("SourceLockedOrientationActivity")
    override fun onCreate(savedInstanceState: Bundle?) {
        // 如果当前不是竖向就切换成竖向
        if (requestedOrientation != ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
            requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
        }
        super.onCreate(savedInstanceState)
        ......
    }

如果你要锁定横向的话,就将SCREEN_ORIENTATION_PORTRAIT改成SCREEN_ORIENTATION_LANDSCAPE就可以了。

网上的大部分教程都是走到了这一步,但是在Android10上依旧会出现屏幕先横屏再竖屏的情况。 所以要继续做下面这一步

修改AndroidManifest.xml

在你的每个 == < Activity /> == 中增加一行android:screenOrientation="locked"
如下面这个

<activity
            android:name=".activity.MainActivity"
            android:screenOrientation="locked"/>

现在编译运行一下,是否发现固定屏幕方向了呢

完事

当然这个方法比较复杂,毕竟AndroidManifest.xml中的每个activity都要去加一句,我暂时没想到更好的方法,如果您有,希望您能评论区讨论一下!谢谢

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值