React Native安卓端如何实现手机禁用横屏、平板支持横竖屏
安卓设备差异化屏幕方向配置方案
方案1:基于资源限定符实现(推荐)
该方案通过系统自带的最小宽度限定符自动识别设备类型,适配准确率高。
- 第一步:移除
AndroidManifest.xml中所有Activity的android:screenOrientation="portrait"全局配置 - 第二步:在
res目录下新建平板专属资源文件夹values-sw600dp,在该文件夹中新建bools.xml文件,写入配置:<resources> <bool name="is_tablet_device">true</bool> </resources> - 第三步:在默认的
res/values/bools.xml文件中添加默认配置:<resources> <bool name="is_tablet_device">false</bool> </resources> - 第四步:在所有Activity的
onCreate方法、setContentView调用前插入如下代码:// Java 示例 if (!getResources().getBoolean(R.bool.is_tablet_device)) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); }// Kotlin 示例 if (!resources.getBoolean(R.bool.is_tablet_device)) { requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT }
方案2:运行时动态判断实现
该方案通过代码直接读取设备屏幕配置判断类型,灵活度更高。
- 第一步:和方案1一致,移除清单文件中的全局竖屏配置
- 第二步:编写设备类型判断工具方法:
public static boolean isTablet(Context context) { int screenLayout = context.getResources().getConfiguration().screenLayout; return (screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE; } - 第三步:在Activity的
onCreate方法中调用方法判断,非平板设备强制锁竖屏:if (!isTablet(this)) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); }
注意事项
- 若应用采用单Activity多Fragment架构,仅需要在主Activity中配置一次即可,无需重复编写代码
- 若需要调整平板判定阈值,比如仅允许10寸及以上设备支持横竖屏,可将资源限定符修改为
sw720dp - 若需要避免方向切换时Activity重启,可在清单文件对应Activity的配置中添加
android:configChanges="orientation|screenSize|smallestScreenSize"
内容的提问来源于stack exchange,提问作者STBox
相关产品推荐
相关产品推荐

