React native 如何在React Native中处理响应性布局
我使用React native 如何在React Native中处理响应性布局,react-native,responsive-design,React Native,Responsive Design,我使用react-native维度库使我的UI响应如下: const{width,height} = Dimensions.get('window'); 在my style.js文件中: imageBackgroundLandscape:{ width:height, height:width }, imageBackgroundPortrait:{ width:width, height:height } 问题是,当我旋转屏幕时,宽度和高度变量已经得到了以
react-native维度库使我的UI响应如下:
const{width,height} = Dimensions.get('window');
在my style.js文件中:
imageBackgroundLandscape:{
width:height,
height:width
},
imageBackgroundPortrait:{
width:width,
height:height
}
问题是,当我旋转屏幕时,宽度和高度变量已经得到了以前的值!
例如,在纵向模式下,我的变量为:
width : 800
height: 1280
width : 800 // previous value
height: 1280 // previous value
当我旋转屏幕时,我的变量是:
width : 800
height: 1280
width : 800 // previous value
height: 1280 // previous value
此外,我使用react原生方向来确定屏幕的模式。
我想知道如何在旋转设备时自动更改它们的值(宽度、高度),或者是否有其他库用于此操作
提前谢谢。事实上,你做对了,但只完成了一半任务。您从维度
获得了宽度
和高度
,这是正确的,但是如何反应本族语
了解您的方向变化
首先,您的代码应该了解方向的变化,然后设置回调函数来更改应用程序的状态,以实现新的width
和height
糟糕的是,我不知道react native
是否能够理解内置函数的方向变化。所以我使用来理解方向的变化,然后我使用setState
来重新渲染代码
当然,我将宽度
和高度
放在组件的状态
内
如果要锁定方向更改,请使用。我通常使用以下代码处理高度、宽度的混淆:
//Dimensions.js
import {Dimensions} from 'react-native';
const {height, width} = Dimensions.get('window');
const actualDimensions = {
height: (height<width) ? width : height,
width: (width>height) ? height : width
};
export default actualDimensions;
//Dimensions.js
从“react native”导入{Dimensions};
const{height,width}=Dimensions.get('window');
常数实际尺寸={
高度:(heightheight)?高度:宽度
};
导出默认的实际尺寸;
使用actualDimensions
代替要求尺寸的高度和宽度,并且为了优雅地管理方向,您还应该尝试使用库
维度
是在JS捆绑包加载到应用程序之前加载的,因此建议为每个渲染动态获取高度、宽度
您可以阅读此我通常使用Flexbox来安排我的组件布局。这有助于他们做出反应。也许你也可以试试
首先:
您面临的问题是因为您忘记调用const{width,height}
=Dimensions.get('window')方向更改后,再次执行代码>操作。
为了在方向更改后获取宽度
和高度
的最新值,您必须再次调用维度。获取('window')
函数,并从其输出中获取宽度和高度
其次:
不用使用多个库,只需使用一个库(),即可轻松处理此类内容:
下面是使用时代码的外观
从'react native styleman'导入{withStyles};
常量样式=()=>({
容器:{
//您可以在此处选择容器节点的常用样式。
弹性:1,
//允许编写媒体查询以根据设备的方向自动更改背景颜色
“@media”:[
{
方向:'横向',//横向
样式:{//应用以下样式
//这些样式将在设备处于横向时应用
//模式。
背景颜色:“绿色”
//……这里有更多与景观相关的风格。。。
}
},
{
方向:'纵向',//用于纵向
样式:{//应用下列样式
//这些样式将在设备处于纵向时应用
//模式。
背景颜色:“红色”
//…这里有更多与protrait相关的样式。。。
}
}
]
}
});
让MainComponent=({styles})=>(
你好,世界
);
//现在,让我们把东西连接起来。
主组件=带有样式(样式)(主组件);
出口{
主要成分
};
我正在使用。它也在改变方向
用法
导入{
宽度百分比TODP作为wp,
高度百分比TODP作为hp,
ListenOrientation更改为lor,
将OrientationListener作为rol删除
}来自“反应本机响应屏幕”;
类登录扩展组件{
componentDidMount(){
lor(本);
}
组件将卸载(){
rol();
}
render(){
const styles=StyleSheet.create({
容器:{flex:1},
文本包装器:{
高度:马力('70%),
宽度:wp('80%”)
},
myText:{fontSize:hp('5%')}
});
返回(
登录
);
}
}
导出默认登录;
您可以使用这些步骤使您的用户界面具有响应性。
1: use percentage whenever it's possible
2: use the power of flexbox to make your UI grow and shrink
3: use a library lik react-native-responsive-screen
我推荐这个库: