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都要去加一句,我暂时没想到更好的方法,如果您有,希望您能评论区讨论一下!谢谢