gridlayout - tablelayout android ejemplo
¿Cómo alinear vistas en la parte inferior de la pantalla? (18)
1.Utilice ConstraintLayout
en su diseño de raíz
Y configura la app:layout_constraintBottom_toBottomOf="parent"
para que el diseño en la parte inferior de la pantalla
<LinearLayout
android:id="@+id/LinearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent">
</LinearLayout>
2.Utilice FrameLayout
en el diseño de su raíz
Solo establece android:layout_gravity="bottom"
en tu diseño
<LinearLayout
android:id="@+id/LinearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:orientation="horizontal">
</LinearLayout>
3. Use LinearLayout
en su diseño de raíz ( android:orientation="vertical"
)
(1) Establezca un android:layout_weight="1"
diseño android:layout_weight="1"
en la parte superior de su diseño
<TextView
android:id="@+id/TextView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:text="welcome" />
(2) Establezca el LinearLayout
secundario para android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="bottom"
El atributo principal es ndroid:gravity="bottom"
, que el niño vea en la parte inferior de Layout.
<LinearLayout
android:id="@+id/LinearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom"
android:orientation="horizontal">
</LinearLayout>
4.Utilice RelativeLayout
en el diseño raíz
Y configure android:layout_alignParentBottom="true"
para permitir que el diseño en la parte inferior de la pantalla
<LinearLayout
android:id="@+id/LinearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal">
</LinearLayout>
SALIDA
Aquí está mi código de diseño;
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:text="@string/welcome"
android:id="@+id/TextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</TextView>
<LinearLayout android:id="@+id/LinearLayout"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="bottom">
<EditText android:id="@+id/EditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</EditText>
<Button android:text="@string/label_submit_button"
android:id="@+id/Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
</LinearLayout>
</LinearLayout>
El aspecto que tiene está a la izquierda y el aspecto que quiero que tenga a la derecha.
La respuesta obvia es configurar TextView para fill_parent en altura, pero esto no deja espacio para el botón o el campo de entrada. Esencialmente, el problema es que quiero que el botón de envío y la entrada de texto tengan una altura fija en la parte inferior y que la vista de texto llene el resto del espacio, de manera similar en el diseño lineal horizontal Quiero que el botón de envío incluya su contenido y para que la entrada de texto llene el resto del espacio.
Si al primer elemento de un diseño lineal se le indica que se llene con paterno, hace exactamente eso, sin dejar espacio para otros elementos, ¿cómo puedo obtener un elemento que sea el primero en un diseño lineal para llenar todo el espacio aparte del mínimo requerido por el resto de Los elementos en el diseño?
EDITAR:
Disposiciones relativas fueron de hecho la respuesta - ¡Gracias!
<?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">
<TextView
android:text="@string/welcome"
android:id="@+id/TextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true">
</TextView>
<RelativeLayout
android:id="@+id/InnerRelativeLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" >
<Button
android:text="@string/label_submit_button"
android:id="@+id/Button"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
<EditText
android:id="@+id/EditText"
android:layout_width="fill_parent"
android:layout_toLeftOf="@id/Button"
android:layout_height="wrap_content">
</EditText>
</RelativeLayout>
</RelativeLayout>
Creando tanto HEADER como FOOTER, aquí hay un ejemplo
[XML de diseño]
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/backgroundcolor"
tools:context=".MainActivity">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="40dp"
android:background="#FF0000">
</RelativeLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="40dp"
android:layout_alignParentBottom="true"
android:background="#FFFF00">
</RelativeLayout>
</RelativeLayout>
[ Captura de pantalla ]
Espero que esto sea de ayuda. ¡¡Gracias!!
Creo que deberías probar un diseño relativo .
Si tiene un diseño relativo que llena toda la pantalla, debería poder usar android:layout_alignParentBottom
para mover el botón a la parte inferior de la pantalla.
Si sus vistas en la parte inferior no se muestran en un diseño relativo, entonces tal vez el diseño de arriba tome todo el espacio. En este caso, puede colocar la vista que debería estar en la parte inferior, primero en su archivo de diseño y colocar el resto del diseño sobre las vistas con android:layout_above
. Esto permite que la vista inferior ocupe todo el espacio que necesita y el resto del diseño puede llenar todo el resto de la pantalla.
En caso de tener una jerarquía como esta:
<ScrollView>
|-- <RelativeLayout>
|-- <LinearLayout>
Primero, aplique android:fillViewport="true"
al ScrollView
y luego aplique android:layout_alignParentBottom="true"
al LinearLayout
.
Esto funcionó perfectamente para mí.
<ScrollView
android:layout_height="match_parent"
android:layout_width="match_parent"
android:scrollbars="none"
android:fillViewport="true">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:id="@+id/linearLayoutHorizontal"
android:layout_alignParentBottom="true">
</LinearLayout>
</RelativeLayout>
</ScrollView>
En un ScrollView
esto no funciona, ya que RelativeLayout
se superpondría con lo que haya en el ScrollView
en la parte inferior de la página.
Lo arreglé usando un FrameLayout
dinámicamente extendido:
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:fillViewport="true">
<LinearLayout
android:id="@+id/LinearLayout01"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical">
<!-- content goes here -->
<!-- stretching frame layout, using layout_weight -->
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1">
</FrameLayout>
<!-- content fixated to the bottom of the screen -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<!-- your bottom content -->
</LinearLayout>
</LinearLayout>
</ScrollView>
Esto también funciona.
<LinearLayout
android:id="@+id/linearLayout4"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_below="@+id/linearLayout3"
android:layout_centerHorizontal="true"
android:orientation="horizontal"
android:gravity="bottom"
android:layout_alignParentBottom="true"
android:layout_marginTop="20dp"
>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
/>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
/>
</LinearLayout>
Esto también se puede hacer con un diseño lineal. Simplemente proporcione Altura = 0dp y peso = 1 al diseño anterior y el que desee en la parte inferior, simplemente escriba altura = contenido de envoltura y sin peso. Lo que hace es que proporciona contenido de ajuste para el diseño (el que contiene el texto y el botón de edición) y luego el que tiene peso ocupa el resto del diseño. Descubrí esto por accidente.
La respuesta anterior (por Janusz) es bastante correcta, pero personalmente no me siento cómodo al 100% con RelativeLayouts, así que prefiero introducir un ''relleno'', TextView vacío, como este:
<!-- filler -->
<TextView android:layout_height="0dip"
android:layout_width="fill_parent"
android:layout_weight="1" />
antes del elemento que debe estar en la parte inferior de la pantalla.
Ni siquiera es necesario anidar el segundo diseño relative
dentro del primero. Simplemente use el android:layout_alignParentBottom="true"
en el botón y el texto de edición .
Para un caso como este siempre use RelativeLayouts. Un LinearLayout no está diseñado para tal uso.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/db1_root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- Place your layout here -->
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_gravity="bottom"
android:orientation="horizontal"
android:paddingLeft="20dp"
android:paddingRight="20dp" >
<Button
android:id="@+id/setup_macroSavebtn"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Save" />
<Button
android:id="@+id/setup_macroCancelbtn"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Cancel" />
</LinearLayout>
</RelativeLayout>
Puede mantener su diseño lineal inicial anidando el diseño relativo dentro del diseño lineal:
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:text="welcome"
android:id="@+id/TextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</TextView>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button android:text="submit"
android:id="@+id/Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true">
</Button>
<EditText android:id="@+id/EditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/Button"
android:layout_alignParentBottom="true">
</EditText>
</RelativeLayout>
</LinearLayout>
Si no desea realizar muchos cambios, puede simplemente poner:
android:layout_weight="1"
para el TextView que tiene ID como @+id/TextView
ie
<TextView android:text="@string/welcome"
android:id="@+id/TextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
</TextView>
Siguiendo con la elegante solución de Timores, he descubierto que lo siguiente crea un relleno vertical en un LinearLayout vertical y un relleno horizontal en un LinearLayout horizontal:
<Space
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
Solo puede asignar a su vista superior (el TextView @ + id / TextView ) un atributo: android:layout_weight="1"
.
Esto forzará a todos los demás elementos debajo de él hacia abajo
También puedes hacer esto con un LinearLayout o un ScrollView. A veces es más fácil implementar un RelativeLayout. Lo único que debe hacer es agregar la siguiente vista antes de las Vistas que desea alinear en la parte inferior de la pantalla:
<View
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1" />
Esto crea una vista vacía, llena el espacio vacío y empuja las siguientes vistas a la parte inferior de la pantalla.
Use android:layout_alignParentBottom="true"
en su <RelativeLayout>
.
Esto definitivamente ayudará.
Utilicé la solución publicada por Janusz, pero agregué el relleno a la última Vista ya que la parte superior de mi diseño era un ScrollView. El ScrollView estará parcialmente oculto a medida que crece con el contenido. Usar android: paddingBottom en la última vista ayuda a mostrar todo el contenido en ScrollView.
use el botón de alineación del código a continuación para reducir su funcionamiento
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btn_back"
android:layout_width="100dp"
android:layout_height="80dp"
android:text="Back" />
<TextView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.97"
android:gravity="center"
android:text="Payment Page" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Submit"/>
</LinearLayout>
</LinearLayout>