最後にこれを行う正しい方法が見つかりました。フレックスレイアウトで固定サイズのアイテムを使用するには、width/heightではなく、flex:0とflexBasisを使用します。私のコンポーネントをラップするコンポーネントのサイズが正しくなく、フレックスレンダリングがうまくいかなかったため、このアプローチは当初はうまくいかなかった。 flexBasisは、絶対数に設定すると密度に依存しないピクセルのようです。
Proof of concept on expo.io
import React, { Component } from 'react';
import { Text, View, StyleSheet } from 'react-native';
import { Constants } from 'expo';
export default class App extends Component {
render() {
return (
<View>
<Text>Test</Text>
<View style={styles.container}>
<Text style={styles.text1}>{"Left\nText"}</Text>
<View style={styles.view} />
<Text style={styles.text2}>Test</Text>
</View>
<View style={styles.container}>
<Text style={styles.text1}>{"Left\nText"}</Text>
<View style={styles.view} />
<Text style={styles.text2}>Test</Text>
</View>
<View style={styles.container}>
<Text style={styles.text1}>{"Left\nText"}</Text>
<View style={styles.view} />
<Text style={styles.text2}>Test</Text>
</View>
<Text>Test</Text>
<View style={styles.container}>
<Text style={styles.text1}>{"Left\nText"}</Text>
<View style={styles.view} />
<Text style={styles.text2}>Test</Text>
</View>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flexDirection: "row",
alignItems: 'center',
justifyContent: 'center',
paddingTop: Constants.statusBarHeight,
backgroundColor: '#ecf0f1',
},
view: {
flex: 0,
flexBasis: 50,
height: 50,
backgroundColor: "red",
},
text1: {
flex: 1,
textAlign: "right",
paddingRight: 10,
},
text2: {
flex: 1,
textAlign: "left",
paddingLeft: 10,
}
});
私が反応におけるデフォルトの方向がCOLUMN'、 'フレックスを(あなたが水平にすることができます' alignItems'を使用して画像をセンタリング) 'であることを考える:1 'ディレクティブは縦にスペースを配布しています、水平ではありません。 'align- *'プロパティは* cross axis *で動作します。 'flex'プロパティは*主軸*上で動作します。 –