Android Disposición Alinear a la derecha
-
29-09-2019 - |
Pregunta
Tengo el siguiente diseño en su sitio
<?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">
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:layout_weight="1">
<WebView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/webview" android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
<LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="13">
<LinearLayout android:id="@+id/LinearLayout01" android:layout_width="wrap_content" android:layout_height="wrap_content">
<LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1">
<ImageButton android:background="@null" android:id="@+id/back" android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/back" android:padding="10dip" />
</LinearLayout>
<LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1">
<ImageButton android:background="@null" android:id="@+id/forward" android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/forward" android:padding="10dip" />
</LinearLayout>
</LinearLayout>
<RelativeLayout android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_weight="1" >
<ImageButton android:background="@null" android:id="@+id/special" android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/barcode" android:padding="10dip" android:layout_gravity="right"/>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
A los efectos de esta pregunta, estoy sólo se preocupa por la mitad inferior de la distribución. En este momento contiene 3 imagebuttons. La primera 2, quiero uno al lado del otro alineado a la izquierda. El tercero, quiero estar alineado a la derecha.
Como es, los 2 primeros botones están donde yo quiero que sean, pero la tercera stubbernly es mantenerse alineado a la izquierda. ¿Cómo iba a hacerlo bien alineado.
Solución
El diseño es extremadamente ineficiente e hinchado. No es necesario que muchos LinearLayout
s. De hecho, usted no necesita ningún LinearLayout
en absoluto.
Utilice un solo RelativeLayout
. Como este.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<ImageButton android:background="@null"
android:id="@+id/back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/back"
android:padding="10dip"
android:layout_alignParentLeft="true"/>
<ImageButton android:background="@null"
android:id="@+id/forward"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/forward"
android:padding="10dip"
android:layout_toRightOf="@id/back"/>
<ImageButton android:background="@null"
android:id="@+id/special"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/barcode"
android:padding="10dip"
android:layout_alignParentRight="true"/>
</RelativeLayout>
Otros consejos
Se puede hacer todo lo que mediante el uso de un solo RelativeLayout
(que, por cierto parámetro android:orientation
, no es necesario). Así, en lugar de tener un LinearLayout
, que contiene un montón de cosas, se puede hacer algo como:
<RelativeLayout>
<ImageButton
android:layout_width="wrap_content"
android:id="@+id/the_first_one"
android:layout_alignParentLeft="true"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_toRightOf="@+id/the_first_one"/>
<ImageButton
android:layout_width="wrap_content"
android:layout_alignParentRight="true"/>
</RelativeLayout>
Como habrá notado, hay algunos parámetros XML que faltan. Me acaba de mostrar los parámetros básicos que tenía que poner. Puede completar el resto.
Si desea utilizar LinearLayout , puede hacerlo alineación con layout_weight
con el elemento Space
.
por ejemplo. siguiendo lugares de disposición textView
y textView2
uno junto al otro y textView3
estará alineado a la derecha
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/textView" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/textView2" />
<Space
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="20dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/textView3" />
</LinearLayout>
se puede lograr el mismo efecto sin Space
si desea establecer layout_weight
a textView2
. Es sólo que me gustan las cosas más separados, además de demostrar elemento Space
.
<TextView
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Medium Text"
android:id="@+id/textView2" />
Tenga en cuenta que usted debe (no debe sin embargo) conjunto layout_width
de forma explícita, ya que se volverá a calcular de acuerdo a su peso de todos modos (misma manera que debe establecer la altura de los elementos de LinearLayout
vertical). Por otra disposición consejos de rendimiento ver Android Disposición trucos serie.
Este es un ejemplo para un RelativeLayout :
RelativeLayout relativeLayout=(RelativeLayout)vi.findViewById(R.id.RelativeLayoutLeft);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)relativeLayout.getLayoutParams();
params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
relativeLayout.setLayoutParams(params);
Con otro tipo de diseño (ejemplo LinearLayout) usted simplemente tiene que cambiar RelativeLayout LinearLayout .
Para apoyar versión anterior del espacio puede ser reemplazado con vistas a continuación. Añadir esta visión entre la izquierda después de la mayor parte de los componentes y la mayor parte componente antes de la derecha. Este punto de vista con el peso = 1 se estirará y llenar el espacio
<View
android:layout_width="0dp"
android:layout_height="20dp"
android:layout_weight="1" />
código de ejemplo completo se da aquí. Se ha tiene 4 componentes. Dos flechas estarán en el lado derecho y el izquierdo. El texto y Spinner estarán en el medio.
<ImageButton
android:id="@+id/btnGenesis"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center|center_vertical"
android:layout_marginBottom="2dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="2dp"
android:background="@null"
android:gravity="left"
android:src="@drawable/prev" />
<View
android:layout_width="0dp"
android:layout_height="20dp"
android:layout_weight="1" />
<TextView
android:id="@+id/lblVerseHeading"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:gravity="center"
android:textSize="25sp" />
<Spinner
android:id="@+id/spinnerVerses"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:gravity="center"
android:textSize="25sp" />
<View
android:layout_width="0dp"
android:layout_height="20dp"
android:layout_weight="1" />
<ImageButton
android:id="@+id/btnExodus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center|center_vertical"
android:layout_marginBottom="2dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="2dp"
android:background="@null"
android:gravity="right"
android:src="@drawable/next" />
</LinearLayout>