Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Es posible distribuir uniformemente botones a través del ancho de un androide linearlayout

Tengo un diseño lineal (orientado horizontalmente) que contiene 3 botones. Quiero que los 3 botones tengan un ancho fijo y estén uniformemente distribuidos a través del ancho del diseño lineal.

Puedo manejar esto fijando la gravedad del linearlayout al centro y después ajustando el relleno de los botones, pero esto trabaja para un ancho fijo y no trabajará para el cambio de dispositivos u orientaciones.

  • Cómo borrar la pila de Android de las actividades?
  • BaseAdapter notifyDatasetChanged () llamado pero getView () nunca se llama
  • Final de Android vs Vistas de texto privadas
  • Google Analytics Android SDK V4 confusión
  • Cómo configurar imágenes dymanic para ViewFlipper en android?
  • Cómo resolver el error onClientConnectionState () - status = 22 clientIf = 7 en BLE
  • <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> 

  • Dependencia de Android Gradle en un proyecto GitHub bifurcado
  • Android Intent Data Parámetro de consulta Uri
  • Android In App no ​​sincroniza inmediatamente entre varios dispositivos
  • ¿Cómo se establece la variable de entorno ANDROID_SDK_HOME?
  • Emulador de Android, pantalla de cubierta con la palma a oscurecer
  • Compatibilidad con Android. Estoy confundido cuando uso Build.VERSION_CODES
  • 13 Solutions collect form web for “Es posible distribuir uniformemente botones a través del ancho de un androide linearlayout”

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

    Si no desea que los botones varíen, pero ajuste el espaciado entre los botones (el mismo espacio 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> 

    Usted puede utilizarlo con como el 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> 

    Bueno, si tienes exactamente 3 botones y si está bien (o incluso planeado) que los botones externos estén alineados a la izquierda ya la derecha, entonces deberías intentar un RelativeLayout que es menos sobrecarga (en muchas situaciones).

    Puede utilizar 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.

    Puede hacer esto dando tanto View sa layout_width de 0dp como un 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, se ve al tamaño que una vista normalmente tomaría y reservaría este espacio.
    • En segundo lugar, si el diseño es match_parent entonces se dividirá el espacio que queda en la proporción del layout_weight s. Por lo tanto, si usted dio las vistas layout_weight="2" y layout_weight="1" , la proporció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.

    Así que por eso si le das layout_width un tamaño de 0dp el primer paso no tiene significado añadido ya que a ambas vistas no se les asigna ningún espacio. Entonces sólo el segundo punto decide el espacio que cada View obtiene, dando así a la View s el espacio que especificó de acuerdo con la relación!

    Para explicar por qué 0dp hace que el espacio se divida por igual proporcionando un ejemplo que muestra lo contrario: El código siguiente resultaría en algo diferente ya que el example text tiene ahora un ancho que es mayor que 0dp porque tiene wrap_content lugar de dejar el espacio libre a la izquierda para Dividir menos del 100% porque el texto toma espacio. El resultado será que obtienen el 50% del espacio libre, pero el texto ya ocupaba un 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> 

    Usted debe echar un vistazo a android: layout_weight atributo

    Para espaciar uniformemente dos botones en un diseño lineal horizontal, usé 3 objetos LinearLayout para actuar como espacios que van a ser redimensionados automáticamente. Posicioné estos objetos LinearLayout como sigue:

    [] Botón1 [] Botón2 []

    ([] Representa un objeto LinearLayout utilizado para el espaciado)

    Entonces pongo cada uno de estos pesos de los objetos [] LinearLayout a 1, y obtengo botones uniformemente espaciados.

    Espero que esto ayude.

    Esto se puede lograr asignando weight a cada botón añadido 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); } 

    Así que podemos conseguir esto en nuestro dispositivo como resultado:

    Introduzca aquí la descripción de la imagen

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

    Introduzca aquí la descripción de la imagen

    He creado una vista personalizada DistributeLayout para hacer esto.

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

    Le sugiero que use el atributo weightSum de LinearLayout.

    Añadir la etiqueta android:weightSum="3" a la declaración xml de LinearLayout y luego a android:layout_weight="1" a tus botones resultará en que los 3 botones estén distribuidos uniformemente.

    Las respuestas anteriores usando layout_didn't trabajo 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,

    Introduzca aquí la descripción de la imagen

     <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 el círculo, Tom, Tim y Todd se supone que son 3 centímetros. Si quieres que sea pantalla táctil, ponlo como Tom y Tim se supone que es de 1 centímetro, lo que significa que combinan virtual, pero su plano 2D está en la parte inferior. Esto se muestra en la pantalla.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.