React Native: обновить макет приложения после показа клавиатуры
Сейчас я работаю над общей проблемой, что клавиатура нажимает приложение вне представления.
Настройки android: windowSoftInputMode = "adjustResize" не работают.
Прямо сейчас я изменяю размер в соответствии с клавиатурой вручную следующим образом:
keyboardWillShow(e) {
setTimeout(()=> {
this.keyboardOffset = e.endCoordinates.height;
}, 500)
}
keyboardWillHide(e) {
this.keyboardOffset = 0;
}
///...
const resultingHeight = windowHeight - this.keyboardOffset - Navigator.NavigationBar.Styles.General.TotalNavHeight;
viewStyle = {
height: resultingHeight
};
Это почти работает. Но моя проблема заключается в том, что приложение выталкивается за пределы представления, тогда клавиатураWillShow запускается и меняет размер на правильный, а затем ничего не происходит. Android не обновляет макет после показа клавиатуры.
![введите описание изображения здесь]()
EDIT: другие сообщения на SO не помогли, потому что параметр adjustResize не работает, и я использую native-native, а не собственный андроид.
Ответы
Ответ 1
Если я помню, keyboardwillShow
и keyboardWillHide
не запускаются на Android.
Это поведение должно быть родным для Android, попробовали ли вы установить windowSoftInputMode следующим образом и не прослушивать события?
android:windowSoftInputMode="adjustPan"
Если это не работает для вас, вы можете заглянуть в KeyboardAvoidingView
, новый с помощью 0.34
. это, кажется, решение того, что вы пытаетесь выполнить.
Он является компонентом для решения общей проблемы представлений, которые должны быть удалены с пути виртуальной клавиатуры. Он может автоматически настраивать либо его положение, либо нижнее дополнение в зависимости от положения клавиатуры.
KeyboardAvoidingView Docs
Ответ 2
KeyboardAvoidingView
вел себя хуже, чем я ожидал, поэтому я создал собственное решение с ScrollView
, которое обертывает все приложение (высота устанавливается с помощью Dimensions
), затем на любой входной клик - в зависимости от того, где вход (нижняя/верхняя половина экрана - с помощью UIManager.measure
и TextInputState.currentlyFocusedField
), я просматриваю представление или нет - будет ли это работать для вас? (изменение размера изображения на меньшую высоту не будет работать (хорошо выглядят) во многих случаях) - я могу предоставить некоторый код