Es gibt auch eine Lösung mit Systemeinsätzen, aber sie funktioniert nur mit API >= 21
( Android L
). Angenommen, Sie haben BottomNavigationView
, das ein Kind von LinearLayout
und Sie müssen es ausblenden, wenn die Tastatur angezeigt wird:
> LinearLayout
> ContentView
> BottomNavigationView
Alles, was Sie tun müssen, ist, die LinearLayout
auf diese Art und Weise:
public class KeyboardAwareLinearLayout extends LinearLayout {
public KeyboardAwareLinearLayout(Context context) {
super(context);
}
public KeyboardAwareLinearLayout(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public KeyboardAwareLinearLayout(Context context,
@Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public KeyboardAwareLinearLayout(Context context, AttributeSet attrs,
int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override
public WindowInsets onApplyWindowInsets(WindowInsets insets) {
int childCount = getChildCount();
for (int index = 0; index < childCount; index++) {
View view = getChildAt(index);
if (view instanceof BottomNavigationView) {
int bottom = insets.getSystemWindowInsetBottom();
if (bottom >= ViewUtils.dpToPx(200)) {
// keyboard is shown
view.setVisibility(GONE);
} else {
// keyboard is hidden
view.setVisibility(VISIBLE);
}
}
}
return insets;
}
}
Die Idee ist, dass wenn die Tastatur angezeigt wird, die Systemeinsätze mit ziemlich großen .bottom
Wert.
9 Stimmen
Obwohl die Antwort von Reuben Scratton gut ist, scheint sie auf einem Tablet nicht zu funktionieren. Ich habe die Prüfung diff>128 durch diff>screenHeight/3 ersetzt.
2 Stimmen
Die Antwort von Reuben Scratton war gut, aber ich brauchte die Anpassung von KaChi, um sie wirklich nutzen zu können.
0 Stimmen
Anstatt nur den Höhenunterschied zu prüfen, können wir Folgendes tun
View v = this.getCurrentFocus();if (diff>100 && v != null){ // Its keyboard } else { //Keyboard hidden }
0 Stimmen
Sie können diese Methode ausprobieren, sie hat bei mir gut funktioniert. stackoverflow.com/questions/4745988/
0 Stimmen
@ChristopherHackl danke, das funktioniert bei mir
0 Stimmen
2018 immer noch darüber wüten
0 Stimmen
Ich habe einen Weg gefunden, dies zu tun: stackoverflow.com/questions/4745988/ (cc @FloWe)
2 Stimmen
Warum macht Google nicht eine Standardmethode, die für alle Tastatur-Apps funktioniert?
0 Stimmen
Für diejenigen, die nach einer Antwort suchen, gibt es eine saubere Lösung: stackoverflow.com/a/54761109/5730321
5 Stimmen
Es bricht mir immer noch das Herz, dass dies kein System ist, das funktioniert...
1 Stimmen
Es ist völlig verrückt, dass diese API immer noch nicht vorhanden ist. 10 Jahre später . Ich bin sehr froh, dass ich von Android weggegangen bin.
0 Stimmen
Dort finden Sie die Antwort stackoverflow.com/questions/25216749/