es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Los botones no ocupan de manera uniforme el ancho del elemento padre al utilizar cadenas de ConstraintLayout.

Estoy tratando de crear una cadena con 2 botones en la parte inferior de un ConstraintLayout usando una cadena, pero no está funcionando. He eliminado un par de vistas por encima de los botones para mayor claridad.

<?xml version="1.0" encoding="utf-8"?>
<ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

<Button
    android:id="@+id/button1"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
     android:layout_alignParentBottom="true"
    android:layout_marginEnd="10dp"
    android:text="Botón 1"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toStartOf="@id/button2"
    app:layout_constraintHorizontal_weight="1"
    app:layout_constraintHorizontal_chainStyle="spread"
    app:layout_constraintTop_toBottomOf="@id/guideline" />

<Button
    android:id="@+id/button2"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_marginStart="4dp"
    android:layout_marginEnd="10dp"
    android:text="Botón 2"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintHorizontal_weight="1"
    app:layout_constraintStart_toEndOf="@id/button1"
    app:layout_constraintTop_toBottomOf="@id/guideline" />

</ConstraintLayout>

Los botones aparecen en la parte inferior de la pantalla, uno al lado del otro, pero no ocupan el ancho del padre, es decir, cada uno ocupa el 50% de la pantalla. Se ajustan al texto del lado de la pantalla.

¿Qué estoy haciendo mal?

Actualización:
Veo que si agrego algo diferente a 0dp, por ejemplo, 200dp, se expanden las vistas. Pero tenía la impresión de que debería usar 0dp para respetar las restricciones.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema que está experimentando se debe a que no ha establecido el valor layout_width de los botones en 0dp. Esto es necesario al crear cadenas (chains) en un ConstraintLayout. Mencionó que intentó usar 0dp, pero no funcionó.

    Al ver su código, se dio cuenta de que ha establecido layout_width de los botones en wrap_content. En lugar de ello, cambie esto a 0dp como se muestra a continuación:

    android:layout_width="0dp"
    

    Esto asegurará que los botones respeten las restricciones horizontales aplicadas a ellos y ocupen el 50% de la pantalla cada uno.

    Además, asegúrese de que el atributo app:layout_constraintHorizontal_chainStyle esté establecido en "spread_inside" en lugar de "spread". Esto asegurará que los botones estén espaciados uniformemente dentro del espacio disponible de la cadena.

    app:layout_constraintHorizontal_chainStyle="spread_inside"
    

    Con estos cambios, su código debería verse así:

    <?xml version="1.0" encoding="utf-8"?>
    <constraintlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent">
    
        <button android:id="@+id/button1" android:layout_width="0dp" android:layout_height="wrap_content" android:text="Button 1" app:layout_constraintstart_tostartof="parent" app:layout_constraintend_tostartof="@+id/button2" app:layout_constrainthorizontal_chainstyle="spread_inside" app:layout_constraintvertical_bias="1.0"></button>
    
        <button android:id="@+id/button2" android:layout_width="0dp" android:layout_height="wrap_content" android:text="Button 2" app:layout_constraintstart_toendof="@+id/button1" app:layout_constraintend_toendof="parent" app:layout_constrainthorizontal_chainstyle="spread_inside" app:layout_constraintvertical_bias="1.0"></button>
    
    </constraintlayout>
    

    ¡Espero que esto ayude!

Comments are closed.