studio linearlayout español elementos ejemplo dinamico derecha definicion contenedores constraint caracteristicas alinear ala android android-layout android-constraintlayout

linearlayout - layout dinamico android



Cómo centrar los elementos en ConstraintLayout (5)

Estoy usando ConstraintLayout en mi aplicación para hacer el diseño de las aplicaciones. Estoy tratando de crear una pantalla donde un EditText y Button deben estar en el centro y Button debe estar debajo de EditText con un margen superior a solo 16dp.

Aquí está mi diseño y captura de pantalla de cómo se ve en este momento.

activity_authenticate_content.xml

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="16dp" android:paddingRight="16dp" tools:context="com.icici.iciciappathon.login.AuthenticationActivity"> <android.support.design.widget.TextInputLayout android:id="@+id/client_id_input_layout" android:layout_width="0dp" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent"> <android.support.design.widget.TextInputEditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/login_client_id" android:inputType="textEmailAddress" /> </android.support.design.widget.TextInputLayout> <android.support.v7.widget.AppCompatButton android:id="@+id/authenticate" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:text="@string/login_auth" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="@id/client_id_input_layout" app:layout_constraintRight_toRightOf="@id/client_id_input_layout" app:layout_constraintTop_toTopOf="@id/client_id_input_layout" /> </android.support.constraint.ConstraintLayout>


Actualizar:

Cadena

Ahora puede usar la función de chain en modo packed como se describe en la respuesta de Eugene.

Guía

Puede usar una guía horizontal en una posición del 50% y agregar restricciones inferiores y superiores (8dp) para editar el texto y el botón:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="16dp" android:paddingRight="16dp"> <android.support.design.widget.TextInputLayout android:id="@+id/client_id_input_layout" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginBottom="8dp" app:layout_constraintBottom_toTopOf="@+id/guideline" android:layout_marginRight="8dp" app:layout_constraintRight_toRightOf="parent" android:layout_marginLeft="8dp" app:layout_constraintLeft_toLeftOf="parent"> <android.support.design.widget.TextInputEditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/login_client_id" android:inputType="textEmailAddress"/> </android.support.design.widget.TextInputLayout> <android.support.v7.widget.AppCompatButton android:id="@+id/authenticate" android:layout_width="0dp" android:layout_height="wrap_content" android:text="@string/login_auth" app:layout_constraintTop_toTopOf="@+id/guideline" android:layout_marginTop="8dp" android:layout_marginRight="8dp" app:layout_constraintRight_toRightOf="parent" android:layout_marginLeft="8dp" app:layout_constraintLeft_toLeftOf="parent"/> <android.support.constraint.Guideline android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/guideline" android:orientation="horizontal" app:layout_constraintGuide_percent="0.5"/> </android.support.constraint.ConstraintLayout>


Hay una manera más simple. Si establece restricciones de diseño de la siguiente manera y su EditText tiene un tamaño fijo, se centrará en el diseño de restricción:

app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"

El par izquierdo / derecho centra la vista horizontalmente y el par superior / inferior la centra verticalmente. Esto se debe a que cuando configura las restricciones izquierda, derecha o superior e inferior más grandes que la vista, la vista se centra entre las dos restricciones, es decir, el sesgo se establece en 50%. También puede mover la vista hacia arriba / abajo o hacia la derecha / izquierda configurando el sesgo usted mismo. Juegue un poco y verá cómo afecta la posición de las vistas.


La solución con guía funciona solo para este caso particular con EditText de una sola línea. Para que funcione para EditText multilínea, debe usar una cadena "empaquetada".

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="16dp" android:paddingRight="16dp"> <android.support.design.widget.TextInputLayout android:id="@+id/client_id_input_layout" android:layout_width="0dp" android:layout_height="wrap_content" app:layout_constraintBottom_toTopOf="@+id/authenticate" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_chainStyle="packed"> <android.support.design.widget.TextInputEditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/login_client_id" android:inputType="textEmailAddress" /> </android.support.design.widget.TextInputLayout> <android.support.v7.widget.AppCompatButton android:id="@+id/authenticate" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:text="@string/login_auth" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="@id/client_id_input_layout" app:layout_constraintRight_toRightOf="@id/client_id_input_layout" app:layout_constraintTop_toBottomOf="@id/client_id_input_layout" /> </android.support.constraint.ConstraintLayout>

Así es como se ve:

Puede leer más sobre el uso de cadenas en las siguientes publicaciones:


Puede centrar una vista como un porcentaje del tamaño de la pantalla.

Este ejemplo usa 50% de ancho y alto:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="0dp" android:layout_height="0dp" android:background="#FF0000" android:orientation="vertical" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintHeight_percent=".5" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintWidth_percent=".5"></LinearLayout> </android.support.constraint.ConstraintLayout>

Esto se hizo usando ConstraintLayout versión 1.1.3. No olvide agregarlo a sus dependencias en el gradle, y aumente la versión si hay una nueva versión disponible:

dependencies { ... implementation ''com.android.support.constraint:constraint-layout:1.1.3'' }


puede usar layout_constraintCircle para la vista central dentro de ConstraintLayout.

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/mparent" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageButton android:id="@+id/btn_settings" android:layout_width="wrap_content" android:layout_height="wrap_content" app:srcCompat="@drawable/ic_home_black_24dp" app:layout_constraintCircle="@id/mparent" app:layout_constraintCircleRadius="0dp" /> </android.support.constraint.ConstraintLayout>

con restricciónCircle to parent y zero radius puede hacer que su vista sea el centro de la matriz.