J'ai déjà lu plusieurs tutoriels flexbox, mais je ne parviens toujours pas à faire fonctionner cette tâche simple.
Comment puis-je faire la boîte rouge à 100% de largeur?
Code:
<View style={styles.container}>
<Text style={styles.welcome}>
Welcome to React Natives
</Text>
<Text style={styles.line1}>
line1
</Text>
<Text style={styles.instructions}>
Press Cmd+R to reload,{'\n'}
Cmd+D or shake for dev menu
</Text>
</View>
style:
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
borderWidth: 1,
flexDirection: 'column',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
borderWidth: 1,
},
line1: {
backgroundColor: '#FDD7E4',
},
instructions: {
textAlign: 'center',
color: '#333333',
marginBottom: 5,
borderWidth: 1,
},
Je vous remercie!
Mise à jour 1: Suggestion de Nishanth Shankar, ajout de flex: 1 pour le wrapper, flexDirection: 'rangée'
Sortie:
Code:
<View style={styles.container}>
<View style={{flex:1}}>
<Text style={styles.welcome}>
Welcome to React Natives
</Text>
</View>
<View style={{flex:1}}>
<Text style={styles.line1}>
line1
</Text>
</View>
<View style={{flex:1}}>
<Text style={styles.instructions}>
Press Cmd+R to reload,{'\n'}
Cmd+D or shake for dev menu
</Text>
</View>
</View>
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#F5FCFF',
borderWidth: 1,
flexDirection: 'row',
flexWrap: 'wrap',
},
welcome: {
fontSize: 20,
textAlign: 'center',
margin: 10,
borderWidth: 1,
},
line1: {
backgroundColor: '#FDD7E4',
},
instructions: {
textAlign: 'center',
color: '#333333',
marginBottom: 5,
borderWidth: 1,
},
Ajoutez simplement alignSelf: "stretch"
à la feuille de style de votre article.
line1: {
backgroundColor: '#FDD7E4',
alignSelf: 'stretch',
textAlign: 'center',
},
Vous devriez utiliser Dimensions
Commencez par définir les dimensions.
import { Dimensions } from "react-native";
var width = Dimensions.get('window').width; //full width
var height = Dimensions.get('window').height; //full height
puis changez le style line1
comme ci-dessous:
line1: {
backgroundColor: '#FDD7E4',
width: width,
},
Édité:
Afin de ne plier que le texte central, une approche différente peut être adoptée - Déplie les autres vues.
alignItems : 'center'
du conteneuralignSelf:'center'
aux vues de texte que vous ne voulez pas modifierVous pouvez envelopper le composant Texte dans un composant View et lui donner une valeur de 1.
Le flex donnera:
100% largeur si le flexDirection:'row'
dans styles.container
100% hauteur si le flexDirection:'column'
dans styles.container
Ici vous allez:
Il suffit de changer le style line1 comme ci-dessous:
line1: {
backgroundColor: '#FDD7E4',
width:'100%',
alignSelf:'center'
}
Utilisez javascript pour obtenir la largeur et la hauteur et ajoutez-les dans le style de View. Pour obtenir une largeur et une hauteur complètes, utilisez Dimensions.get('window').width
https://facebook.github.io/react-native/docs/dimensions.html
getSize() {
return {
width: Dimensions.get('window').width,
height: Dimensions.get('window').height
}
}
puis,
<View style={[styles.overlay, this.getSize()]}>
Ajoutez d'abord le composant Dimension:
import { AppRegistry, Text, View,Dimensions } from 'react-native';
Deuxième définir des variables:
var height = Dimensions.get('window').height;
var width = Dimensions.get('window').width;
Troisièmement, mettez-le dans votre feuille de style:
textOutputView: {
flexDirection:'row',
paddingTop:20,
borderWidth:1,
borderColor:'red',
height:height*0.25,
backgroundColor:'darkgrey',
justifyContent:'flex-end'
}
En fait, dans cet exemple, je voulais créer une vue réactive et ne visionner que 0,25 de la vue à l'écran. Je l'ai donc multiplié par 0,25. Si vous souhaitez utiliser 100% de l'écran, ne le multipliez pas comme ceci:
textOutputView: {
flexDirection:'row',
paddingTop:20,
borderWidth:1,
borderColor:'red',
height:height,
backgroundColor:'darkgrey',
justifyContent:'flex-end'
}
Remarque: essayez de bien comprendre le concept de flex.
<View style={{
flex: 2,
justifyContent: 'center',
alignItems: 'center'
}}>
<View style ={{
flex: 1,
alignItems: 'center,
height: 50,
borderWidth: 1,
borderColor: '#000'
}}>
<Text>Welcome to React Nativ</Text>
</View>
<View style={{
flex: 1,
alignItems: 'center,
borderWidth: 1,
borderColor: 'red ',
height: 50
}}
>
<Text> line 1 </Text>
</View>
<View style={{
flex: 1,
alignItems: 'center,
height: 50,
borderWidth: 1,
borderColor: '#000'
}}>
<Text>
Press Cmd+R to reload,{'\n'}
Cmd+D or shake for dev menu
</Text>
</View>
</View>
il suffit de supprimer le alignItems: 'center'
dans les styles de conteneur et d'ajouter textAlign: "center"
au style line1
comme indiqué ci-dessous.
Ça va bien marcher
container: {
flex: 1,
justifyContent: 'center',
backgroundColor: '#F5FCFF',
borderWidth: 1,
}
line1: {
backgroundColor: '#FDD7E4',
textAlign:'center'
},
Style = {{width: "100%"}} Essayez cette syntaxe. entrez la description du lien ici