useAnimatedKeyboard
useAnimatedKeyboard lets you create animations based on state and height of the virtual keyboard.
Android implementation of useAnimatedKeyboard has drawbacks on Android SDK < 30, for more details see remarks section.
Reference
import { useAnimatedKeyboard, useAnimatedStyle } from 'react-native-reanimated';
export default function App() {
const keyboard = useAnimatedKeyboard();
const animatedStyles = useAnimatedStyle(() => ({
transform: [{ translateY: -keyboard.height.value }],
}));
}


Type definitions
// --- Function declaration ---
function useAnimatedKeyboard(
options: AnimatedKeyboardOptions
): AnimatedKeyboardInfo;
// --- Configuration types ---
export interface AnimatedKeyboardOptions {
isStatusBarTranslucentAndroid?: boolean;
}
// --- Return types ---
export type AnimatedKeyboardInfo = {
height: SharedValue<number>;
state: SharedValue<KeyboardState>;
};
export enum KeyboardState {
UNKNOWN = 0,
OPENING = 1,
OPEN = 2,
CLOSING = 3,
CLOSED = 4,
}
Arguments
options Optional
Optional object containing additional configuration:
isStatusBarTranslucentAndroid- removes top inset on Android i.e. to use translucent status bar on Android, set this option totrue. Defaults tofalse. Ignored on iOS.
Returns
Hook useAnimatedKeyboard returns an object containing these fields:
| Name | Type | Description |
|---|---|---|
| height | SharedValue<number> | A shared value containing current height of the keyboard. |
| state | SharedValue<KeyboardState> | A shared value containing current state of the keyboard. Possible states: { CLOSED, OPEN, CLOSING, OPENING } |
Example
Remarks
-
On Android, make sure to set
android:windowSoftInputModein yourAndroidManifest.xmltoadjustResize. Then, using theuseAnimatedKeyboardhook disables the default Android behavior (resizing the view to accommodate keyboard) in the whole app. Using values fromuseAnimatedKeyboardhook you can handle the keyboard yourself. Unmounting all components that useuseAnimatedKeyboardhook brings back the default Android behavior. -
On Android, using the
useAnimatedKeyboardhook expands root view to full screen (immersive mode) and takes control over insets management.-
When
isStatusBarTranslucentAndroidisfalseit applies the top margin according to the insets. -
When
isStatusBarTranslucentAndroidistrueit sets top margin to0. -
When
isNavigationBarTranslucentAndroidisfalseit applies the bottom margin according to the insets. -
When
isNavigationBarTranslucentAndroidistrueit sets bottom margin to0.
-
-
On Android, when using navigation with native header,
isStatusBarTranslucentAndroiddoesn't affect the top inset. -
On Android SDK < 30, when status bar is hidden, the keyboard reverts to the default Android behavior.
-
Available from 3.17.0On iPad, when the keyboard is floating, the hook will always return height:
0and state:CLOSED.
Platform compatibility
| Android | iOS | Web |
|---|---|---|
| ✅ | ✅ | ❌ |