我使用Expo XDE(xde-2.19.3)在屏幕上创建了一个带有一些TextInputs
的反应原生项目。我使用KeyboardAwareScrollView
将键盘下方的输入滚动到视图中并在iOS上正常工作,但在Android上无效。希望这是有道理的。
查看了KeyboardAwareScrollView
文档,看到我需要配置AndroidManifest.xml
,但似乎世博已经对此进行了整理:https://github.com/expo/expo/blob/master/template-files/android/AndroidManifest.xml
但是我仍然无法在Android上运行...
我能错过什么?
render() {
return (
<KeyboardAwareScrollView
enableOnAndroid='true'
enableAutoAutomaticScrol='true'
keyboardOpeningTime={0}
>
<ScrollView style={styles.container}>
<View style={styles.subcontainer}>
<View style={styles.form}>
<TextInput
ref='NoduleCountInput'
onFocus={() => this.onFocus()}
onBlur={() => this.onBlur()}
keyboardType='phone-pad'
returnKeyType='done'
placeholder='Test'
style={styles.field}
/>
<TextInput
ref='NoduleCountInput'
onFocus={() => this.onFocus()}
onBlur={() => this.onBlur()}
keyboardType='phone-pad'
returnKeyType='done'
placeholder='Test'
style={styles.field}
/>
<TextInput
ref='NoduleCountInput'
onFocus={() => this.onFocus()}
onBlur={() => this.onBlur()}
keyboardType='phone-pad'
returnKeyType='done'
placeholder='Test'
style={styles.field}
/>
<TextInput
ref='NoduleCountInput'
onFocus={() => this.onFocus()}
onBlur={() => this.onBlur()}
keyboardType='phone-pad'
returnKeyType='done'
placeholder='Test'
style={styles.field}
/>
<TextInput
ref='NoduleCountInput'
onFocus={() => this.onFocus()}
onBlur={() => this.onBlur()}
keyboardType='phone-pad'
returnKeyType='done'
placeholder='Test'
style={styles.field}
/>
<TextInput
ref='NoduleCountInput'
onFocus={() => this.onFocus()}
onBlur={() => this.onBlur()}
keyboardType='phone-pad'
returnKeyType='done'
placeholder='Test'
style={styles.field}
/>
<TextInput
ref='NoduleCountInput'
onFocus={() => this.onFocus()}
onBlur={() => this.onBlur()}
keyboardType='phone-pad'
returnKeyType='done'
placeholder='Test'
style={styles.field}
/>
</View>
</View>
</ScrollView>
</KeyboardAwareScrollView>
);
}
答案 0 :(得分:6)
我尝试了上述解决方案来支持跨平台,但它不正确。如果您希望自动滚动到TextInput的焦点工作,那么正确而完整的解决方案是按如下方式设置参数:
<KeyboardAwareScrollView
enableOnAndroid={true}
enableAutomaticScroll={(Platform.OS === 'ios')}
>
...
</KeyboardAwareScrollView>
这是因为默认情况下启用了enableAutomaticScroll,它会与原生Android行为混淆,从而产生意外结果。因此,当Platform是Android时,请将此字段设置为false。
是的,还要在app.json
中设置以下内容,否则它将无效。
"androidStatusBar": {
"backgroundColor": "#000000"
}
答案 1 :(得分:5)
我尝试了其他解决方案并且它们对我不起作用,但最后我设法通过使用以下代码使其工作:
<KeyboardAwareScrollView enableOnAndroid={true} extraHeight={130} extraScrollHeight={130}>
...
</KeyboardAwareScrollView>
答案 2 :(得分:3)
这就是我修复它的方法:
在app.json
我设置:
"androidStatusBar": {
"backgroundColor": "#000000"
}
这解决了这个问题,我不知道怎么回事。因此,只要其他人发现它有用,就会离开这里。
答案 3 :(得分:1)
<KeyboardAwareScrollView
enableOnAndroid={true}
extraScrollHeight={90}
>
<Content>
<View></View>
</Content>
<KeyboardAwareScrollView/>
答案 4 :(得分:0)
对我来说,我在Android(原生0.62.2)上遇到了这个问题。 iOS运行正常。我发现Android清单中的adjustResize
标志是罪魁祸首。我将其删除并开始工作
之前
android:windowSoftInputMode="stateAlwaysHidden|adjustPan|adjustResize"
之后
android:windowSoftInputMode="stateAlwaysHidden|adjustPan"
警告
我不知道将来会引起什么副作用。
答案 5 :(得分:-1)
使用
<activity android:windowSoftInputMode="adjustResize"></activity>
在Manifest