Предположим, что rootView вашего макета - RelativeLayout.
Что вы можете сделать, создайте класс CustomRelativeLayout, который расширяет RelativeLayout и
Переопределяет метод onSizeChanged внутри него.
Поэтому, когда программная клавиатура откроется, высота RelativeLayout изменится, и
об изменении будет сообщено в методе onSizeChanged.
public class CustomRelativeLayout extends RelativeLayout {
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
int softKeyboardHeight = oldh - h; // Assuming softKeyboard Opened up
// oldh is the height when the layout was covering the whole screen
// h is the new height of the layout when the soft keyboard opened up
if(softKeyboardHeight > oldh * 0.15) {
Log.i("Here", Integer.toString(softKeyboardHeight));
// Keyboard has popped up
} else {
// Not the keyboard
}
}
В вашем файле манифеста внесите эти изменения, чтобы действие открывалось в режиме изменения размера, а не в режиме панорамирования и сканирования. В режиме изменения размера макет сможет изменить размер при открытии клавиатуры.
Чтобы узнать больше о пан-скан и изменении размера визита
https://developer.android.com/training/keyboard-input/visibility
<activity
android:name=".MainActivity"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>