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), я просматриваю представление или нет - будет ли это работать для вас? (изменение размера изображения на меньшую высоту не будет работать (хорошо выглядят) во многих случаях) - я могу предоставить некоторый код