studio linearlayout examples ejemplo constraint caracteristicas android android-linearlayout

android - linearlayout - relative layout



¿Es posible distribuir los botones de manera uniforme en todo el ancho de un lineallayout de Android? (17)

Tengo un diseño lineal (orientado horizontalmente) que contiene 3 botones. Quiero que los 3 botones tengan un ancho fijo y que se distribuyan uniformemente en todo el ancho del diseño lineal.

Puedo manejar esto configurando la gravedad de linearlayout en el centro y luego ajustando el relleno de los botones, pero esto funciona para un ancho fijo y no funciona para cambiar dispositivos u orientaciones.

<LinearLayout android:id="@+id/LinearLayout01" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_width="fill_parent" android:gravity="center"> <Button android:id="@+id/btnOne" android:layout_width="wrap_content" android:layout_height="wrap_content" android:width="120dip"></Button> <Button android:id="@+id/btnTwo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:width="120dip"></Button> <Button android:id="@+id/btnThree" android:layout_width="wrap_content" android:layout_height="wrap_content" android:width="120dip"></Button> </LinearLayout>


Ampliando la respuesta de fedj , si establece layout_width en 0dp y configura el layout_weight para cada uno de los botones en 1, el ancho disponible se compartirá de manera equitativa entre los botones.


Bueno, si tiene exactamente 3 botones y está bien (o incluso planeado) que los botones externos estén alineados al lado izquierdo y derecho, entonces es posible que desee probar un RelativeLayout que es menos general (en muchas situaciones).

Puede usar layout_alignParentBottom para alinear todos los botones con la parte inferior del diseño. Use layout_alignParentLeft and Right para los botones externos y layout_centerHorizontal para el botón central.

Eso funcionará bien en diferentes orientaciones y tamaños de pantalla.


Debes echarle un vistazo al atributo android: layout_weight


El mejor enfoque es usar TableLayout con android: layout_width = "match_parent" y en las columnas use android: layout_weight = "1" para todas las columnas


Esto se puede lograr asignando weight a cada botón agregado dentro del contenedor, muy importante para definir la orientación horizontal:

int buttons = 5; RadioGroup rgp = (RadioGroup) findViewById(R.id.radio_group); rgp.setOrientation(LinearLayout.HORIZONTAL); for (int i = 1; i <= buttons; i++) { RadioButton rbn = new RadioButton(this); rbn.setId(1 + 1000); rbn.setText("RadioButton" + i); //Adding weight LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1f); rbn.setLayoutParams(params); rgp.addView(rbn); }

para que podamos obtener esto en nuestro dispositivo como resultado:

Incluso si giramos nuestro dispositivo, el weight definido en cada botón puede distribuir los elementos uniformemente a lo largo del contenedor:



La forma más fácil y rápida, (pero no la mejor), es agregar un TextView con un atributo de texto vacío, como este

android:text=""

el color de fondo debe ser el mismo en LinearLayout, entonces usted podría usar la propiedad de relleno, como esta

android:paddingBottom="250dp"

o lo que necesites. Aquí hay un ejemplo.


Las respuestas anteriores usando layout_did no funcionaron para mí, pero lo siguiente lo hizo.

<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_weight="0.1" android:layout_gravity="center_horizontal" > <android.support.design.widget.FloatingActionButton android:layout_width="50dp" android:layout_height="50dp" android:layout_gravity="center" /> <android.support.design.widget.FloatingActionButton android:layout_width="50dp" android:layout_height="50dp" android:layout_gravity="center" android:layout_marginLeft="40dp" android:layout_marginStart="40dp"/> <android.support.design.widget.FloatingActionButton android:layout_width="50dp" android:layout_height="50dp" android:layout_gravity="center" android:layout_marginLeft="40dp" android:layout_marginStart="40dp" /> <android.support.design.widget.FloatingActionButton android:layout_width="50dp" android:layout_height="50dp" android:layout_gravity="center" android:layout_marginLeft="40dp" android:layout_marginStart="40dp"/> </LinearLayout>

Así es como se ve en la pantalla,


Le sugiero que use el atributo weightSum de LinearLayout.

Agregar la etiqueta android:weightSum="3" a la declaración xml de su LinearLayout y luego android:layout_weight="1" a sus botones dará como resultado que los 3 botones se distribuyan de manera uniforme.


Para espaciar uniformemente dos botones en un diseño lineal horizontal, utilicé 3 objetos LinearLayout para que actúen como espacios que se redimensionarán automáticamente. Coloqué estos objetos LinearLayout como sigue:

[] Button1 [] Button2 []

([] representa un objeto LinearLayout usado para el espaciado)

luego puse cada uno de los pesos de estos [] objetos LinearLayout en 1, y obtengo botones espaciados uniformemente.

Espero que esto ayude.


Por encima de todas las respuestas son correctas, pero en el caso de que necesite funciones visibles y desaparecidas, este método pragmático funcionará bien.

<LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:orientation="horizontal"> <Button android:id="@+id/btnOne" android:layout_width="120dp" android:layout_height="match_parent"></Button> <Button android:id="@+id/btnTwo" android:layout_width="120dp" android:layout_height="match_parent"></Button> <Button android:id="@+id/btnThree" android:layout_width="120dp" android:layout_height="match_parent"></Button> </LinearLayout> float width=CommonUtills.getScreenWidth(activity); int cardWidth=(int)CommonUtills.convertDpToPixel (((width)/3),activity); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(width, LinearLayout.LayoutParams.MATCH_PARENT); btnOne.setLayoutParams(params); btnTwo.setLayoutParams(params); btnThree.setLayoutParams(params); public class CommonUtills { public static float getScreenWidth(Context context) { float width = (float) 360.0; DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); width = displayMetrics.widthPixels / displayMetrics.density; return width; } }


Puede hacer esto dando tanto un layout_width de 0dp de View layout_width de 0dp como un layout_weight de layout_weight de 1 :

<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/> <TextView android:layout_width="0dp" android:text="example text" android:layout_height="wrap_content" android:layout_weight="1"/> </LinearLayout>

La forma en que android layout_weight funciona es que:

  • Primero, mira el tamaño que normalmente tomaría una Vista y reserva este espacio.
  • segundo, si el diseño es match_parent entonces se dividirá el espacio que queda en la relación del layout_weight s. Por lo tanto, si dio las Vistas layout_weight="2" y layout_weight="1" , la relación resultante será de 2 a 1, es decir: la primera Vista obtendrá 2/3 del espacio que queda y la otra vista 1 / 3.

Por eso, si layout_width a layout_width un tamaño de 0dp el primer paso no tiene un significado adicional, ya que a ambas Vistas no se les asigna ningún espacio. Entonces, solo el segundo punto decide el espacio que obtiene cada View , por lo tanto, ¡le da a la View el espacio que especificó de acuerdo con la proporción!

Para explicar por qué 0dp hace que el espacio se divida de manera equitativa al proporcionar un ejemplo que muestra lo contrario: el siguiente código resultaría en algo diferente, ya que el example text ahora tiene un ancho mayor que 0dp porque tiene wrap_content lugar de dejar el espacio libre a Divide menos del 100% porque el texto ocupa espacio. El resultado será que obtienen el 50% del espacio libre que queda, pero el texto ya ocupa algo de espacio, por lo que TextView tendrá más del 50% del espacio total.

<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/> <TextView android:layout_width="wrap_content" android:text="example text" android:layout_height="wrap_content" android:layout_weight="1"/> </LinearLayout>


Puedes usarlo con lo siguiente.

<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="15dp"> <Space android:layout_weight="1" android:layout_height="wrap_content" android:layout_width="wrap_content"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Save"/> <Space android:layout_weight="1" android:layout_height="wrap_content" android:layout_width="wrap_content"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Reset"/> <Space android:layout_weight="1" android:layout_height="wrap_content" android:layout_width="wrap_content"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="cancel"/> <Space android:layout_weight="1" android:layout_height="wrap_content" android:layout_width="wrap_content"/> </LinearLayout>


Si no desea que los botones se escalen, pero ajusta el espacio entre los botones (espacio igual entre todos los botones), puede usar vistas con peso = "1" que llenarán el espacio entre los botones:

<Space android:layout_width="0dp" android:layout_height="1dp" android:layout_weight="1" > </Space> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:adjustViewBounds="true" android:background="@null" android:gravity="center_horizontal|center_vertical" android:src="@drawable/tars_active" /> <Space android:layout_width="0dp" android:layout_height="1dp" android:layout_weight="1" > </Space> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:adjustViewBounds="true" android:background="@null" android:gravity="center_horizontal|center_vertical" android:src="@drawable/videos_active" /> <Space android:layout_width="0dp" android:layout_height="1dp" android:layout_weight="1" > </Space>


Niños igualmente ponderados

Para crear un diseño lineal en el que cada niño use la misma cantidad de espacio en la pantalla, configure el android: layout_height de cada vista en "0dp" (para un diseño vertical) o el android: layout_width de cada vista en "0dp" ( para un diseño horizontal). A continuación, establezca el android: layout_weight de cada vista en "1".

Para que esto funcione en el grupo de vistas LinearLayout , los valores de atributo para android:layout_width y android:layout_height deben ser iguales a "match_parent" ...


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="Tom" android:layout_width="match_parent" android:layout_height="match_parent" android:textSize="24sp" android:layout_weight="3"/> <TextView android:text="Tim" android:layout_width="match_parent" android:layout_height="match_parent" android:textSize="24sp" android:layout_weight="3"/> <TextView android:text="Todd" android:layout_width="match_parent" android:layout_height="match_parent" android:textSize="24sp" android:layout_weight="3"/> </LinearLayout>

En círculo, se supone que Tom, Tim y Todd miden 3 centímetros. Si desea que sea una pantalla táctil, póngala como Tom y Tim se supone que son 1 centímetro, lo que significa que combinan lo virtual, pero su plano 2D está en la parte inferior. Esto se muestra en la pantalla.


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:text="Tom" android:layout_width="wrap_content" android:layout_height="200dp" android:textSize="24sp" /> <TextView android:text="Tim" android:layout_width="wrap_content" android:layout_height="200dp" android:textSize="24sp" /> <TextView android:text="Todd" android:layout_width="wrap_content" android:layout_height="200dp" android:textSize="24sp" />