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
- Biblioteca de soporte de diseño actualizada a 22.2.1
- 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 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