问题描述
我有响应式,主题和app.tsx文件。我想在方向更改时在app.tsx中更新主题和样式。
Responsive.tsx文件
export let { width,height } = Dimensions.get(
"window"
);
export const widthPercentagetoDP = (widthPercent:string|number):number => {
const elemWidth =
typeof widthPercent === "number" ? widthPercent : parseFloat(widthPercent);
return PixelRatio.roundToNearestPixel((width * elemWidth) / 100);
};
export const useScreenDimensions = () => {
const [screenData,setScreenData] = useState({ width,height });
useEffect(() => {
Dimensions.addEventListener("change",(newDimensions) => {
setScreenData(newDimensions.screen);
width = newDimensions.screen.width;
height = newDimensions.screen.height;
console.log(newDimensions.window);
});
return () => Dimensions.removeEventListener("change",() => {});
});
return {
...screenData,isLandscape: screenData.width > screenData.height,};
};
const theme = {
spacing: {
m:widthPercentagetoDp("7%") // it must be updated when orientation changes
},borderRadii: {
s:widthPercentagetoDP("5%") // it must be updated when orientation changes
},
App.tsx
export default App(){
const screenData = useScreenDimensions();
return (
<ThemeProvider>
<LoadAssets {...{ fonts,assets }}>
<Text style={{fontSize:widthPercentagetoDP("5%")}}>heyy</Text> // it must be updated
</LoadAssets>
</ThemeProvider>
);
}
我不知道该如何实现。感谢您的帮助
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)