<TextInput
placeholder={'请输入'}
placeholderTextColor={'#5E6266'}
value={currentInputValue}
onChangeText={handleTextChange}
style={styles.input}
multiline={true}//多行和单行的切换
returnKeyType="done"//键盘上的完成按钮
keyboardType="default"//键盘的类型
autoCapitalize="none"// 自动切换大写键盘
selectionColor={'#74FF52'}// 光标颜色
maxLength={maxLength}// 最大长度
blurOnSubmit={true}// 点击完成按钮失去焦点(加这个是因为点键盘的按钮会自动换行- -)
onSubmitEditing={Keyboard.dismiss}// 点击完成按钮后收起键盘
clearButtonMode="while-editing" // iOS清除按钮
/>
键盘出来页面要向上弹起,具体实现思路:
监听键盘出现的时候给父级容器增加marginBotttom=键盘高度
安卓用了客户端返回的键盘高度
这里还遇到了安卓键盘输入一段话点文字的时候乱跑的问题(也是安卓这边单独出了一个bridge去限制)
获取键盘出现隐藏和获取键盘高度
import { useEffect, useState } from 'react';
import { Dimensions, Keyboard, NativeModules, Platform } from 'react-native';
interface KeyboardInfo {
keyboardHeight: number;
keyboardVisible: boolean;
animationDuration: number;
}
export const useKeyboard = () => {
const [keyboardInfo, setKeyboardInfo] = useState<KeyboardInfo>({
keyboardHeight: 0,
keyboardVisible: false,
animationDuration: 250,
});
useEffect(() => {
const handleKeyboardShow = (e: any) => {
let height = 0;
if (Platform.OS === 'ios') {
height = e?.endCoordinates?.height || 0;
} else {
height =
NativeModules.KSRCTBridge.getKeyboardHeight() /
Dimensions.get('screen').scale;
}
setKeyboardInfo({
keyboardHeight: height,
keyboardVisible: true,
animationDuration:
Platform.OS === 'ios' ? e?.duration || 250 : 250,
});
};
const handleKeyboardHide = (e: any) => {
setKeyboardInfo({
keyboardHeight: 0,
keyboardVisible: false,
animationDuration:
Platform.OS === 'ios' ? e?.duration || 250 : 250,
});
};
const showListener =
Platform.OS === 'ios'
? Keyboard.addListener('keyboardWillShow', handleKeyboardShow)
: Keyboard.addListener('keyboardDidShow', handleKeyboardShow);
const hideListener =
Platform.OS === 'ios'
? Keyboard.addListener('keyboardWillHide', handleKeyboardHide)
: Keyboard.addListener('keyboardDidHide', handleKeyboardHide);
return () => {
showListener.remove();
hideListener.remove();
};
}, []);
return {
...keyboardInfo,
dismissKeyboard: Keyboard.dismiss,
};
};