Android edittext auto crecer con el texto y empujar las cosas hacia abajo
Sí, esta es otra cuestión editext creciente sobre SO. Y sí, ya he pasado por todas esas preguntas editext crecer. Pero esto un poco específico.
UI:
- MapView en un elemento de listaVer
- ¿Cómo dejar que un TextView tenga varias líneas?
- No se ha establecido el ID del instalador de aplicaciones
- No se puede arrastrar y soltar una imagen simple en el estudio android
- Vista de posición debajo de otra vista en CoordinatorLayout en android
Una disposición androide simple con edittext y un botón debajo de él. Cuando el texto es menor, la vista edittext sigue cubriendo toda la pantalla dejando espacio para el botón de abajo.
Una vez que el usuario comienza a escribir texto, edittext crece verticalmente para acomodar el texto. Al mismo tiempo, el botón también debe mantenerse empujando hacia abajo para dejar crecer.
El usuario puede desplazarse verticalmente por la pantalla para ver el texto completo.
UI después de introducir texto significativo:
Aquí está el diseño con edittext y el botón de abajo:
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/background" android:clipToPadding="false" android:fadingEdge="none" android:fillViewport="true" android:padding="13dp" android:scrollbarStyle="outsideOverlay" > <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1"> <!-- some fixed width image --> <ImageView android:id="@+id/someimage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="4dp" android:src="@drawable/page_white_text" /> <EditText android:id="@+id/some" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/someimage" android:background="@null" android:gravity="top" android:minLines="10" android:minHeight="50dp" android:textColor="#222222" android:textSize="15dp" android:typeface="serif" > <requestFocus /> </EditText> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:baselineAligned="true" android:layout_marginTop="5dp" android:padding="10dp" android:orientation="vertical" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout> </RelativeLayout> </ScrollView>
Esto funciona más o menos. Pero cuando entro a mucho texto, en lugar de presionar el botón hacia abajo. Va detrás de ella como:
Cualquier ayuda aquí es muy apreciada. Gracias 🙂
- Cómo pasar los eventos de toque a la vista principal
- ¿Cómo ocultar por programación algunos elementos de la vista, pero no todos, en una salida XML?
- Error: puedo hacer clic debajo del tablero de navegación
- Android, setVisbility no funcionó en RelativeLayout
- ¿Cómo obtener la altura y el ancho del dispositivo en Runtime?
- Estilos de Android: Diferencia entre 'style = "@ android: style / XYZ"' y 'style = "? Android: attr / XYZ"'?
- ¿Hacer que la vista vacía ocupe el espacio restante después de RecyclerView?
- Problemas de rendimiento de Android ViewPager al utilizar el fondo
Aquí está mi recomendación: dentro del ScrollView, pon un RelativeLayout en el que puedes colocar cada elemento en un cierto orden usando android: layout_below. Para el crecimiento automático de su EditText, utilice esta solución .
Veamos un ejemplo:
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_gravity="center"> <RelativeLayout android:id="@+id/general2" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:layout_margin="20sp" > <TextView android:id="@+id/textFirstOpinion" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/titleFirstOpinion" android:textStyle="bold" android:textSize="23sp" android:textColor="#FFFFFF" android:layout_marginTop="10dp" /> <EditText android:id="@+id/fieldFirstOpinion" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_below="@id/textFirstOpinion" android:minHeight="80sp" android:isScrollContainer="true" android:inputType="textMultiLine" android:textSize="20sp" android:gravity="top|left" /> <Button android:id="@+id/button" android:layout_width="110dp" android:layout_height="wrap_content" android:layout_below="@id/fieldFirstOpinion" android:layout_centerHorizontal="true" android:layout_marginTop="37sp" android:textSize="23sp" android:text="@string/textSendButton" android:gravity="center_horizontal" android:padding="10dp" /> </RelativeLayout> </ScrollView>
Intenta agregar android: layout_below = "@ id / some" en tu LinearLayout como
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:baselineAligned="true" android:layout_marginTop="5dp" android:padding="10dp" android:orientation="vertical" android:layout_below="@id/some" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout>
Puesto que desea que el botón esté en la parte inferior de la página, agregue la línea siguiente
android:layout_below="@+id/some" android:layout_centerHorizontal="true" android:layout_alignParentBottom="true"
En su código LinearLayout aquí como
<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/some" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_alignParentBottom="true" android:baselineAligned="true" android:layout_marginTop="5dp" android:padding="10dp" android:orientation="vertical" >
También asegúrese de que el parámetro layout:height
de EditText esté configurado en wrap_content
Intente esto y dígame si funciona o no