React native 布局在React Native中显示方向错误(使用Expo)
我用Expo在React native中开发了一个应用程序。。当我在android模拟器和手机上测试时,一切都很好。。但是,当我将APK交给其他人为我测试时,出现了一个问题。。RTL电话的布局是相反的。。我在React native 布局在React Native中显示方向错误(使用Expo),react-native,expo,right-to-left,React Native,Expo,Right To Left,我用Expo在React native中开发了一个应用程序。。当我在android模拟器和手机上测试时,一切都很好。。但是,当我将APK交给其他人为我测试时,出现了一个问题。。RTL电话的布局是相反的。。我在App.js(根文件)的构造函数中编写了这两行代码来解决这个问题 I18nManager.allowRTL(false); I18nManager.forceRTL(false); 但是,此解决方案仅在应用程序第二次启动时有效,而在应用程序第一次启动时不起作用(这会给人留下很坏的印象
App.js
(根文件)的构造函数中编写了这两行代码来解决这个问题
I18nManager.allowRTL(false);
I18nManager.forceRTL(false);
但是,此解决方案仅在应用程序第二次启动时有效,而在应用程序第一次启动时不起作用(这会给人留下很坏的印象)。。我阅读了使用名为RNRestart的npm软件包的解决方案,但它需要链接,expo不支持链接,因此我在第一次启动时使用expo函数Util.reload()
,但是,这对这些人没有帮助,他们的应用程序布局在第一次使用它时仍然以相反的方式显示
作为一个快速修复,我们决定显示一条错误消息,提示用户退出应用程序,如果这是应用程序第一次加载,则重新输入(这是一个非常糟糕的解决方案)
有人知道为什么会发生这种情况以及如何解决吗?您可以在AndroidManifest.xml中添加代码,默认情况下禁用Rtl,而无需重新启动应用程序
<!-- AndroidManifest.xml -->
<application
android:supportsRtl="false"
....
而且,您不必同时使用这两种方法。如果你只使用一个,它的工作原理是一样的。您可以在应用程序
类之外进行设置。下面是一个测试示例
import React,{Component}来自'React';
从“react native”导入{Switch,I18nManager,Text,View,StyleSheet};
从“expo常量”导入常量;
//I18nManager.forceRTL(假);
I18nManager.allowRTL(false);
导出默认类应用程序扩展组件{
状态={
isRTL:I18nManager.isRTL,
};
render(){
返回(
{this.state.isRTL?'Right to Left':'Left to Right'}
福塞尔
);
}
_onDirectionChange=()=>{
I18nManager.forceRTL(!this.state.isRTL);
this.setState({isRTL:!this.state.isRTL});
};
}
const styles=StyleSheet.create({
容器:{
弹性:1,
paddingTop:Constants.statusBarHeight,
背景颜色:“#ecf0f1”,
},
方向框:{
背景色:'#F8',
边框宽度:0.5,
边框颜色:“黑色”,
},
方向文本:{
填充:10,
尺寸:16,
textAlign:'中心',
fontWeight:'粗体',
},
flexDirectionRow:{
flexDirection:'行',
},
switchRowTextView:{
弹性:1,
marginBottom:5,
玛金托普:5,
textAlign:'中心',
},
switchRowSwitchView:{
弹性:3,
},
});
如果检测到I18nManager.isRTL,请重新启动应用程序
怎么做
安装:
npm i fiction-expo-restart
在app.js中
进口:
及
然后在componentDidMount()函数中:
componentDidMount()
{
if(I18nManager.isRTL)
{
I18nManager.allowRTL(false);
I18nManager.forceRTL(false);
Restart();
}
}
我使用的图书馆可以在这里找到:
我熟悉此解决方案,但是,expo没有编辑清单或编辑本机代码的选项。。所以是的。。但愿我能做到,但我不能在Expo中做到。你在哪里添加的?@hongdevelop在App.js
的构造函数中,正如我在原始帖子中提到的那样
import {I18nManager} from 'react-native';
componentDidMount()
{
if(I18nManager.isRTL)
{
I18nManager.allowRTL(false);
I18nManager.forceRTL(false);
Restart();
}
}