J'essaie d'ajouter un style au sélecteur réactif, comme le sous-jacent et le paramètre fictif, mais je ne peux pas le faire.
const styles = StyleSheet.create({
picker: {
textDecorationLine: 'underline'
}
});
<Picker
style={[styles.picker]}>
<Picker.Item label="Country" value="" />
<Picker.Item label="United States" value="US" />
<Picker.Item label="India" value="IN" />
</Picker>
textDecorationLine
n'est pas en mesure de définir le style de soulignement sur le sélecteur.En gros, je cherche à créer quelque chose comme ça,
où, je peux également définir la couleur de l'espace réservé.
Merci à l'avance.
Le style de Picker and Picker est géré de manière native sur Android. Vous devez définir le style du SpinnerItem d'Android dans Android/app/src/res/styles.xml
voir: Comment styler le sélecteur Android réactif natif?
J'ai essayé de tester le soulignement, mais je n'arrivais pas à trouver quoi que ce soit qui fonctionne. Voici quelques solutions de contournement Android spinner avec soulignement appcompat
Cependant, je voudrais simplement utiliser les composants réag natif à notre avantage. Je créerais un nouveau composant qui engloberait le sélecteur de React Native et le placerait dans une vue avec le style de soulignement qui rendrait un espace réservé si la valeur du sélecteur n'était pas définie.
Vous devez modifier votre thème d'activité comme suit:
<!-- Base application theme. -->
<style name="AppTheme">
<!-- Customize your theme here. -->
<item name="colorAccent">@color/colorAccent</item>
<item name="Android:spinnerStyle">@style/Base.Widget.AppCompat.Spinner.Underlined</item>
...
</style>
La colorAccent
contrôle la couleur du soulignement et l'utilisation de @style/Base.Widget.AppCompat.Spinner.Underline
fournit le soulignement sur votre Picker
.
Vous pouvez utiliser cette technique pour définir le style sur presque tous les composants Android de React. Android:editTextStyle
, Android:textViewStyle
, etc.
Malheureusement, étant donné que le sélecteur de réactions étend Spinner
et non AppCompatSpinner
, le style sera légèrement différent si vous utilisez une API <21.
Ce morceau de code travaille sur ma machine:
<View style={{borderBottomWidth:1, borderColor: 'rgb(204, 204,
204)',width: "28%"}}>
<Picker
selectedValue={this.state.pickerValue}
style={[styles.textInputBox]}
onValueChange={this.onChange}>
<Picker.Item label="+31" value="+31" />
<Picker.Item label="+41" value="+41" />
<Picker.Item label="+51" value="+51" />
<Picker.Item label="+61" value="+61" />
</Picker>
</View>
C'est le plus proche que je peux obtenir sur iOS: https://snack.expo.io/r1L7DGb1Z
Peu de choses à noter:
1) la propriété itemStyle
permet de définir le style spécifique d'un élément de sélecteur unique
2) Pour obtenir la flèche vers le bas, vous devez l'imiter manuellement. Vous voudrez probablement attacher sa fonctionnalité avec TouchableHighlight (ce qui n'est pas le cas dans l'exemple).
3) Cela ne ressemble pas à Android, vous devrez probablement ajouter un style supplémentaire, spécifique à votre plate-forme.
Le problème ici est une hypothèse selon laquelle Picker
possède les propriétés et le style de TextInput, ce qui n'est pas le cas. Il y a une question connexe ici: Avoir un paramètre fictif pour le sélecteur natif où un commentaire décrit ce dont vous aurez besoin pour rendre quelque chose de similaire au texte fictif.
Afin d'obtenir quelque chose comme textDecorationLine
, vous pouvez appliquer un style borderBottomWidth
au composant.
Pensez également à lier les accessoires selectedValue et onValueChange:
selectedValue={this.state.country} onValueChange={(country) => this.setState({country: country})}>