Android EditText Multiline con SoftInputMode adjustPan
Tengo una actividad para editar algún texto con una barra superior una vista EditText en modo multilínea dentro de una vista de desplazamiento. En la parte inferior otra vista con 2 botones. Lo que quería lograr es cuando se edita el texto que la barra inferior estaría por debajo del softkeyboard. Eso es fácil de usar android: windowSoftInputMode = "adjustPan" en el manifiesto. El problema es si el edittext se convierte en lo suficientemente grande con varias líneas, al editar la barra superior desaparece. Esto sólo ocurre cuando se utiliza el modo adjustPan. Pero lo peor y creo que es un error, es cuando el cursor está al final de la vista edittext y desplazamiento hacia arriba con el joystick D-Pad todo el diseño se tira a la parte superior.
Esta es la pantalla sin foco en el EditText: http://i.stack.imgur.com/pFadV.png
- Ejemplo de servicio de primer plano
- GridView del estilo de Google Play Música
- ¿Invocando una búsqueda o un filtro en un ListFragment de Android?
- El relleno no funciona en algunos dispositivos
- Vista de desplazamiento bidireccional
Cuando el error ocurre con el desplazamiento, esto sucede: http://i.stack.imgur.com/eS8PP.png
Mi diseño es el siguiente:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/BackgroundGray" android:gravity="top|center" android:orientation="vertical" android:windowSoftInputMode="adjustPan" > <RelativeLayout android:id="@+id/top_bar" android:layout_width="fill_parent" android:layout_height="45dip" android:layout_alignParentTop="true" android:background="@drawable/top_bar" android:focusable="true" android:focusableInTouchMode="true" > <ImageView android:id="@+id/bar_item_priority" android:layout_width="4dip" android:layout_height="34dip" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:contentDescription="@string/priority" /> <EditText android:id="@+id/bar_title" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginLeft="6dip" android:background="@android:color/transparent" android:fadingEdge="vertical" android:gravity="center_vertical|left" android:hint="@string/default_title" android:inputType="text|textCapSentences" android:paddingLeft="10dip" android:textColor="#f3f3f3" android:textColorHint="#20ffffff" android:textSize="20dip" android:textStyle="bold" > </EditText> </RelativeLayout> <View android:id="@+id/main_top_bar_shadow" android:layout_width="fill_parent" android:layout_height="1dip" android:layout_below="@+id/top_bar" android:background="@color/TopBarShadow" /> <LinearLayout android:id="@+id/meta_bar" android:layout_width="fill_parent" android:layout_height="25dip" android:layout_below="@+id/main_top_bar_shadow" android:background="#313435" android:descendantFocusability="blocksDescendants" > <TextView android:id="@+id/meta_date_modified" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_vertical|left" android:paddingLeft="10dip" android:paddingRight="10dip" android:paddingTop="6dip" android:shadowColor="#1d1d1d" android:shadowDx="1" android:shadowDy="1" android:shadowRadius="2" android:text="@string/default_date" android:textColor="#9d9d9d" android:textSize="12dip" android:textStyle="bold" > </TextView> </LinearLayout> <ScrollView android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_above="@+id/bottom_bar" android:layout_below="@+id/meta_bar" android:fillViewport="true" android:scrollbarSize="2dip" android:scrollbarThumbHorizontal="@drawable/scrollbar" android:scrollbarThumbVertical="@drawable/scrollbar" android:scrollbars="vertical" > <view android:id="@+id/note" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/transparent" android:capitalize="sentences" class="home.greven.notes.NoteEditor$LinedEditText" android:fadingEdge="vertical" android:gravity="top" android:paddingBottom="8dip" android:paddingLeft="11dip" android:paddingRight="11dip" android:paddingTop="8dip" android:textSize="16sp" > </view> </ScrollView> <View android:id="@+id/bottom_bar_shadow" android:layout_width="fill_parent" android:layout_height="1dip" android:layout_above="@+id/bottom_bar" android:background="@color/TopBarShadow" android:focusable="false" android:focusableInTouchMode="false" /> <LinearLayout android:id="@+id/bottom_bar" android:layout_width="fill_parent" android:layout_height="40dip" android:layout_alignParentBottom="true" android:background="@drawable/bottom_buttons_bar" android:descendantFocusability="blocksDescendants" > <Button android:id="@+id/bottom_bar_button_plaintext" style="@style/NoteEditorButtonText" android:layout_width="0.0dip" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_margin="4dip" android:layout_weight="0.5" android:background="@drawable/small_blue_buttonstates" android:text="@string/plain_text" /> <Button android:id="@+id/bottom_bar_button_checklist" style="@style/NoteEditorButtonText" android:layout_width="0.0dip" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_margin="4dip" android:layout_weight="0.5" android:background="@drawable/small_gray_buttonstates" android:onClick="toChecklist" android:text="@string/checklist" /> </LinearLayout> </RelativeLayout>
Si utilizo adjustResize en android: windowSoftInputMode todo funciona bien, pero luego la barra inferior será visible al editar, algo que no quería que suceda. Creo que este problema de desplazamiento es un error de Android. ¡Cualquier ayuda será muy apreciada!
- Cómo extender LinearLayout correctamente para crear una vista personalizada
- Procesamiento de fragmentos Google Map V2 de Google Studio
- Universal (tableta y teléfono) app - la mejor forma de estructura - múltiples xml de diseño o mostrar / ocultar widgets?
- ¿Cómo conservo el resaltado de elementos seleccionado en gridview cuando cambia numColumns?
- En una actividad tabulada con ViewPager, el ListView aparece cortado desde la parte inferior
- Configuración del título y del subtítulo de la barra de acción
- Diferencia entre Layout y Fragment Layout
- Recorte de visualización de Android
Tengo el mismo problema con el botón en la parte inferior. Después de días de googling encontré esto es debido a los desaparecidos
android:isScrollContainer="false"
En el ScrollView.
El documento de Android menciona esto
Establezca esto si la vista servirá como un contenedor de desplazamiento, indicando que se puede cambiar el tamaño para reducir su ventana general de modo que haya espacio para un método de entrada.
Editar : También compruebe esta respuesta
- ¿Cómo hago que un escáner de huellas digitales USB esté conectado a un teléfono móvil / tablet con éxito?
- Prueba "real" del receptor de sms