2016-07-26 17 views
5

In meiner app ich bin mit einem MapView, ein EditText und FloatingActionButton (fab), und ich möchte, dass die Fab über der Tastatur bewegen, wenn die EditText geklickt wird. Ich fand diese Einstellung android:windowSoftInputMode="adjustResize" in der manifest funktioniert gut mit der Fab, aber es ändert auch meine Karte, die im Hintergrund ist, und es gibt einen wirklich hässlichen Effekt, wenn es die Größe ändert.FloatingActionButton oben KeyBoard ohne „adjustResize“

Hier ist mein Layout:

<CoordinatorLayout> 

    <MapView/> 

    <RelativeLayout> 

     <EditText/> 

     other views ... 

    </RelativeLayout> 

    <FloatingActionButton/> 

    other views ... 

</CoordinatorLayout> 

Jede Idee, wie ich ohne den „adjustResize“ Effekt zu bekommen? Oder vielleicht, wie man eine Ansicht von der Größenänderung ausschließt, aber "adjustResize" behält?

Vielen Dank im Voraus

Antwort

3

Nach einigen Recherchen habe ich die Tastatur Handhabung durch Zugabe eines GlobalLayoutListener auf der Wurzel gelandet Blick auf mein Layout und ein Rechteck des aktuellen sichtbaren Teil dieser Stammansicht zeichnen.
Ich habe auch 25dp zur tatsächlichen Höhe der Tastatur hinzugefügt, weil einige Geräte eine Vorschlagsleiste oberhalb der Tastatur haben, die im sichtbaren Teil des Fensters enthalten sein scheint.
Die if Bedingung ist da, um eine Übersetzung zu verhindern, wenn eine bottomSheet erweitert wird.

private void handleKeyBoardApparition() { 
    root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      Rect r = new Rect(); 

      root.getWindowVisibleDisplayFrame(r); 

      int heightDiff = root.getBottom() - r.bottom; 

      int suggestionsBarHeight = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,25,getActivity().getResources().getDisplayMetrics()); 

      if(!bottomSheetIsVisible){ 
       fabSearch.setTranslationY(-(heightDiff + suggestionsBarHeight)); 
      } 

     } 
    }); 
} 
1

diese in das Layout xml Ihre Stammansicht versuchen,

android:fitsSystemWindows="true" 

Eigenschaft

+0

Es funktioniert nicht –