В настоящее время я работаю над приложением react-native и пытаюсь анимировать макет экрана входа в систему, когда отображается клавиатура.
Чтобы отслеживать состояние клавиатуры, я использую этот код:
componentDidMount() {
this.keyboardDidShowSub = Keyboard.addListener('keyboardDidShow', (event) => console.info(event));
this.keyboardDidHideSub = Keyboard.addListener('keyboardDidHide', (event) => console.info(event));
}
keyboardDidShow работает и возвращается:
Object {
"endCoordinates": Object {
"height": 286,
"screenX": 0,
"screenY": 354,
"width": 360,
},
}
Однако keyboardDidHide НЕ работает и не возвращается null.
Что может вызвать мою проблему? Большое вам спасибо за вашу помощь!!





Это ожидаемое поведение в Android. Если вы посмотрите на базовый код родной, который вызывается, когда клавиатура отображается/скрывается, вы можете увидеть, что отправляется обратно на сторону javascript.
private void checkForKeyboardEvents() {
getRootView().getWindowVisibleDisplayFrame(mVisibleViewArea);
final int heightDiff =
DisplayMetricsHolder.getWindowDisplayMetrics().heightPixels - mVisibleViewArea.bottom;
if (mKeyboardHeight != heightDiff && heightDiff > mMinKeyboardHeightDetected) {
// keyboard is now showing, or the keyboard height has changed
mKeyboardHeight = heightDiff;
WritableMap params = Arguments.createMap();
WritableMap coordinates = Arguments.createMap();
coordinates.putDouble("screenY", PixelUtil.toDIPFromPixel(mVisibleViewArea.bottom));
coordinates.putDouble("screenX", PixelUtil.toDIPFromPixel(mVisibleViewArea.left));
coordinates.putDouble("width", PixelUtil.toDIPFromPixel(mVisibleViewArea.width()));
coordinates.putDouble("height", PixelUtil.toDIPFromPixel(mKeyboardHeight));
params.putMap("endCoordinates", coordinates);
sendEvent("keyboardDidShow", params);
} else if (mKeyboardHeight != 0 && heightDiff <= mMinKeyboardHeightDetected) {
// keyboard is now hidden
mKeyboardHeight = 0;
sendEvent("keyboardDidHide", null); // <- you can see here that when the keyboard is hidden it sends back null
}
}
Стоит отметить, что в iOS эти 'keyboardWillShow', 'keyboardDidShow', 'keyboardWillHide' и 'keyboardDidHide' вернут объект.