@react-native-picker/picker。它支持 Android、iOS、Windows 和 macOS,提供多种设置与自定义选项,因此应用广泛。
本文将详细介绍如何安装这个库、针对各平台进行配置,以及实际实现 Picker 的方法。npm install @react-native-picker/picker --save
# 또는
yarn add @react-native-picker/pickernpx pod-installAndroidManifest.xml 中添加以下配置。
如果应用以从右向左的方向渲染,例如使用阿拉伯语时,就需要此设置。<application
android:supportsRtl="true"
...>import React, { useRef, useState } from "react";
import { Picker } from "@react-native-picker/picker";
const App = () => {
const pickerRef = useRef<any>();
const [selected, setSelected] = useState<string>();
return (
<Picker
ref={pickerRef}
selectedValue={selected}
onValueChange={(itemValue) => setSelected(itemValue)}
>
<Picker.Item label="Java" value="java" />
<Picker.Item label="JavaScript" value="js" />
<Picker.Item label="Python" value="python" />
<Picker.Item label="C#" value="c#" />
</Picker>
);
};
export default App;
selectedValue 设置当前选中的值,并通过 onValueChange 监听变化。useRef 的示例。import React, { useRef, useState } from "react";
import { Picker } from "@react-native-picker/picker";
import { Button } from "react-native";
const App = () => {
const pickerRef = useRef<any>();
const [selected, setSelected] = useState<string>();
const open = () => pickerRef.current?.focus();
const close = () => pickerRef.current?.blur();
return (
<>
<Picker
ref={pickerRef}
selectedValue={selected}
onValueChange={(itemValue) => setSelected(itemValue)}
>
<Picker.Item label="Java" value="java" />
<Picker.Item label="JavaScript" value="js" />
</Picker>
<Button title="Open" onPress={open} />
<Button title="Close" onPress={close} />
</>
);
};
export default App;Picker.Item 指定 label、value、enabled、color 等属性,配置样式和无障碍体验。| 属性名 | 说明 | 平台 |
|---|---|---|
| selectedValue | 当前选中的值 | 全部 |
| onValueChange | 值变化事件 | 全部 |
| mode | 'dialog' 或 'dropdown'(仅限 Android) | Android |
| itemStyle | 设置选项样式 | iOS、Windows |
| enabled | 是否允许选择 | Android、Web、Windows |
| dropdownIconColor | 下拉箭头颜色 | Android |
| selectionColor | 选中文字颜色 | iOS |
testID、无障碍说明 contentDescription、样式属性 style 以及限制行数的 numberOfLines。@react-native-picker/picker 遵循各平台默认的界面风格,所以 @react-native-picker/picker 可能无法满足要求。
这种情况下,可以使用 react-native-element-dropdown↗,在 iOS 和 Android 上实现统一的下拉菜单。npm install react-native-element-dropdown
# 또는
yarn add react-native-element-dropdownimport React, { useState } from 'react';
import { View, StyleSheet } from 'react-native';
import { Dropdown } from 'react-native-element-dropdown';
const data = [
{ label: 'Java', value: 'java' },
{ label: 'JavaScript', value: 'js' },
{ label: 'Python', value: 'python' },
{ label: 'C#', value: 'c#' },
];
const App = () => {
const [value, setValue] = useState(null);
return (
<View style={styles.container}>
<Dropdown
style={styles.dropdown}
placeholderStyle={styles.placeholderStyle} // 빈 상태의 텍스트 스타일
selectedTextStyle={styles.selectedTextStyle} // 선택된 텍스트 스타일
data={data} // 표시할 데이터
labelField="label" // 표시할 데이터의 레이블 필드
valueField="value" // 표시할 데이터의 값 필드
placeholder="언어 선택" // 빈 상태의 텍스트
value={value} // 선택된 값
onChange={(item) => {
setValue(item.value); // 선택된 값 업데이트
}}
/>
</View>
);
};
const styles = StyleSheet.create({
container: { padding: 16 },
dropdown: {
height: 50,
borderColor: '#ccc',
borderWidth: 1,
borderRadius: 8,
paddingHorizontal: 12,
},
placeholderStyle: {
fontSize: 16,
color: '#999',
},
selectedTextStyle: {
fontSize: 16,
color: '#333',
},
});
export default App;
labelField 和 valueField 指定数据中的显示字段和值字段,也提供灵活的样式设置,方便按设计要求调整。| 库 | iOS 界面 | Android 界面 | 特点 |
|---|---|---|---|
@react-native-picker/picker | 对话框 | 下拉菜单或对话框 | 接近原生体验,稳定性高 |
react-native-element-dropdown | 下拉菜单 | 下拉菜单 | 跨平台界面一致,易于自定义 |
@react-native-picker/picker。react-native-element-dropdown。@react-native-picker/picker 是 React Native 中实现跨平台下拉选择界面的实用库。安装简单、配置选项丰富,初学者也能快速上手,还可以按项目需求使用进阶功能。