React Native 选择器样式 - ANDROID

React Native Picker Styling - ANDROID

我正在尝试向 react-native 选择器添加一些样式,例如底层和设置占位符,但无法这样做。

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>
  1. 如果我使用 value="",那么它将国家/地区显示为可选值,这是我不想要的。
  2. textDecorationLine 无法将下划线样式设置为选择器。

基本上,我希望创建这样的东西,

其中,我还可以设置占位符的颜色。

致谢

这里的问题是假设 Picker 具有 TextInput 的属性和样式,而事实并非如此。这里有一个相关的问题:Have a placeholder for react native picker 其中一条评论概述了呈现类似于占位符文本的内容所需的内容。

为了实现类似 textDecorationLine 的效果,您可以对组件应用 borderBottomWidth 样式。

此外,记得绑定 selectedValue 和 onValueChange 道具:

selectedValue={this.state.country} onValueChange={(country) => this.setState({country: country})}>

这是我在 iOS 上最接近的:https://snack.expo.io/r1L7DGb1Z

注意事项:

1) itemStyle 属性 用于设置单个选择器项目的特定样式

2) 为了得到向下的箭头,你必须手动模仿它。您可能希望将其功能附加到 TouchableHighlight(示例中未完成)

3) 这在 Android 中看起来并不相似,因此您可能需要附加额外的、特定于平台的样式。

选择器和选择器项的样式在 Android 上本地处理。您需要在 android/app/src/res/styles.xml 中为 Android 的 SpinnerItem 定义样式,请参阅:

我试图测试下划线,但似乎找不到任何有用的东西。这里有几个解决方法

但是,我会简单地使用 React Native 的组件来发挥我们的优势。我将创建一个包装 React Native 的 Picker 的新组件,并将选择器放在一个带有下划线样式的视图中,如果 Picker 的值未定义,则呈现一个占位符。

您需要修改您的 activity 主题如下:

<!-- 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>

colorAccent 控制下划线的颜色,使用 @style/Base.Widget.AppCompat.Spinner.UnderlinePicker 提供下划线。

您可以使用此技术在 React 中的几乎任何 android 组件上设置样式。 android:editTextStyleandroid:textViewStyle

不幸的是,因为 React Picker 扩展 Spinner 而不是 AppCompatSpinner,如果您 运行 on API < 21,样式会有点不同。

这段代码在我的机器上运行:

           <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>

您也可以使用这个来使您的 react-native 更具吸引力picker.You 可以向您的视图添加样式,以便它可以轻松地更改您的选择器。

import React, { Component } from 'react';
import { View, Picker } from 'react-native';
export default class DropdownDemo extends Component{
    state = { user: '' }
    updateUser = (user) => {
        this.setState({ user: user })
    }
    render(){
        return(
            <View
                    style={{
                        width: 300,
                        marginTop: 15,
                        marginLeft:20,
                        marginRight:20,
                        borderColor: 'black',
                        borderBottomWidth:1,
                        borderRadius: 10,
                        alignSelf: 'center'
                    }}>
                    <Picker
                        selectedValue={this.state.user}
                        onValueChange={this.updateUser}


                    >
                        <Picker.Item label="Male" value="Male" />
                        <Picker.Item label="Female" value="Female" />
                        <Picker.Item label="Other" value="Other" />
                    </Picker>
                </View>
        );
    }
}