React Native Android端ToastAndroid.CENTER/TOP位置设置不生效怎么办
问题原因
Android 12(API 等级31)及以上系统对原生Toast做了系统级限制:普通第三方应用的文本类Toast会被强制固定在屏幕底部,忽略gravity、offset参数的自定义配置,该行为和React Native本身的封装无关,0.66版本的ToastAndroidAPI只是调用了系统原生能力,因此无法突破该限制。
Android 11及更低版本系统不受该限制,你当前写的showWithGravityAndOffset逻辑可以正常生效。
可行解决方案
方案一:加系统版本判断做兼容
先从react-native导入BuildVersion判断设备系统版本,不同版本走不同逻辑:import { Platform, ToastAndroid, BuildVersion } from 'react-native'; const showToast = msg => { if(Platform.OS === 'android'){ // Android 12及以上不支持自定义位置,使用默认展示 if(BuildVersion.SDK_INT >= 31) { ToastAndroid.show(msg, ToastAndroid.LONG); } else { ToastAndroid.showWithGravityAndOffset(msg, ToastAndroid.LONG, ToastAndroid.CENTER, 0, 0); } }else{ Toast.showWithGravity(msg, Toast.SHORT, Toast.TOP); } };该方案无需额外改造,适配系统规则,适合对Toast位置没有强一致性要求的场景。
方案二:使用自定义Toast组件
放弃系统原生Toast能力,自行实现基于RN的全局Toast组件,用绝对定位控制展示位置,可实现两端样式、位置完全统一,不受系统版本限制,是最推荐的上线方案。方案三(不推荐):降低应用targetSdkVersion到30以下
该方式仅可用于本地测试,当前应用商店上架要求targetSdkVersion最低为33,该方案无法满足上线要求。
内容的提问来源于stack exchange,提问作者Akshay Shenoy
相关产品推荐
相关产品推荐

