windowsoftinputmode android android-softkeyboard android-coordinatorlayout adjustpan

android - windowsoftinputmode - Coordinatorlayout ajustar ajuste no funciona



android:windowsoftinputmode="adjustpan" (7)

Esto es solo otro bug en la biblioteca de soporte de diseño y parece que no planean solucionarlo pronto :

Confirmado, pero probablemente no será arreglado en el corto plazo. adjustResize tiene algunos buenos casos de uso, pero usar AppBarLayout con CollapsingToolbarLayout no es uno de ellos.

Es preocupante que nadie haya intentado agregar un EditText a un CoordinatorLayout con android:windowSoftInputMode="adjustResize" al desarrollar la android:windowSoftInputMode="adjustResize" soporte de diseño.

MI CÓDIGO (y más): Tengo un diseño de coordinador de la siguiente manera

<android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:fitsSystemWindows="true"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapse_toolbar" android:layout_width="match_parent" android:layout_height="280dp" android:fitsSystemWindows="true" app:contentScrim="@color/transparent" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <include layout="@layout/top" /> <!-- A RelativeLayout --> <android.support.v7.widget.Toolbar android:id="@+id/MyToolbar" android:layout_width="match_parent" android:layout_height="64dp" app:layout_collapseMode="parallax"> </android.support.v7.widget.Toolbar> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <FrameLayout android:id="@+id/content" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <!-- Main content here --> </FrameLayout> </android.support.design.widget.CoordinatorLayout>

Dentro del diseño del marco, estoy inflando una vista personalizada con un texto de edición que se coloca en la parte inferior. El texto de edición y la vista personalizada se muestran bien.

He definido android: windowSoftInputMode = "adjustResize | stateHidden" en el manifiesto.

MI PROBLEMA: Al tocar el texto de edición para abrir el teclado, se superpone al contenido debajo en lugar de cambiar el tamaño del FrameLayout. Simplemente no pude hacer que FrameLayout cambie de tamaño cuando aparece el teclado virtual. Cualquier ayuda será apreciada.

Cosas que hice

  1. Biblioteca de soporte de diseño actualizada a 22.2.1
  2. Se agregó android: layout_gravity = "fill_vertical" como atributo en FrameLayout.

Estoy usando esto para resolver errores de CoordinatorLayout

en onCreateDialog en BottomSheetFragment

KeyboardUtil(getActivity(), view);

o

Para el uso de la actividad

new KeyboardUtil(this, findViewById(R.id.fragment_container));

usando esta clase de Util

Versión Java: https://github.com/mikepenz/MaterialDrawer/blob/aa9136fb4f5b3a80460fe5f47213985026d20c88/library/src/main/java/com/mikepenz/materialdrawer/util/KeyboardUtil.java

Versión de Kotlin: https://gist.github.com/agustinsivoplas/6f80233699aebebd512542503ea32682 Crédito: Mikepenz, Agustinsivoplas


Hola tuve el mismo problema y solo puse

android:windowSoftInputMode="adjustPan"

en su manifiesto para la actividad en cuestión y el teclado sube la vista en consecuencia ahora


Prueba esto

tu_layout.xml

<RelativeLayout android:fitsSystemWindows="true" > <!-- Crucial! --> <android.support.design.widget.CoordinatorLayout> ... <android.support.v7.widget.RecyclerView /> ... </android.support.design.widget.CoordinatorLayout> </RelativeLayout>

AndroidManifest.xml

<activity android:name=".YourActivity" android:windowSoftInputMode="adjustResize"> <!-- Crucial! --> </activity>


Una versión abreviada de https://github.com/mikepenz/MaterialDrawer/blob/aa9136fb4f5b3a80460fe5f47213985026d20c88/library/src/main/java/com/mikepenz/materialdrawer/util/KeyboardUtil.java , agregue esto a su actividad:

getWindow().getDecorView().getViewTreeObserver() .addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { public void onGlobalLayout() { Rect r = new Rect(); getWindow().getDecorView().getWindowVisibleDisplayFrame(r); rootView.setPadding(0, 0, 0, activity.getResources().getDisplayMetrics().heightPixels - r.bottom); } });


adjustResize no funciona con

app:layout_behavior="@string/appbar_scrolling_view_behavior"

Eliminar esta línea:

app:layout_behavior="@string/appbar_scrolling_view_behavior"


Mi diseño

<android.support.design.widget.CoordinatorLayout> <android.support.design.widget.AppBarLayout> <android.support.design.widget.CollapsingToolbarLayout> <ImageView> <android.support.v7.widget.Toolbar> <android.support.design.widget.CollapsingToolbarLayout> <android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView> <android.support.design.widget.FloatingActionButton> <android.support.design.widget.CoordinatorLayout>

Tuve exactamente el mismo problema. Me di cuenta de que, si uso algo dentro del NestedScrollView por ejemplo, o dentro de un FrameLayout , asumiría también que maneja el desplazamiento en sí mismo, el CoordinatorLayout no adjustResize / comportamiento de la forma deseada. Se ignoran los ajustes de ajuste de tamaño | Ajuste de pan en el manifiesto.

Para mí esto fue muy difícil de entender, porque escribí algunas vistas (combinadas) que contenían RelativeLayout o ScrollViews y ScrollViews .

Si simplemente evito usar RelativeLayouts o cualquier otra cosa que no sea NestedScrollView para manejar el desplazamiento de la vista, se comporta de esa manera, al menos quería que lo NestedScrollView .

Pero creo que hay un error en CoordinatorLayout o un comportamiento que todos necesitamos entender mejor para evitar este tipo de problemas ...

Tal vez esto sea útil saber para alguien ...

Mis configuraciones son:

  • soporte / diseño / appcompat: 22.2.1
  • no hay necesidad de layout_gravity