tipo studio porcentaje percentrelativelayout muestra linearlayout elementos diseño como cambiar amontonados android android-layout

studio - Android ¿Cómo establezco un porcentaje de relleno/margen para que EditText tenga un margen del 10% en cada lado?



percentrelativelayout (4)

Editar: Los diseños de esta respuesta ahora están en desuso. Usa la solución que propuso Eugene Brusov . También, gracias chancyWu por el comentario.

Ahora hay una mejor manera que salió con la versión de soporte de la biblioteca 23.0.0 (a tiempo, ¿no?). Ahora puede usar PercentFrameLayout o PercentRelativeLayout .

Si quisiera que el texto de edición fuera el 80% del ancho de la pantalla con un margen del 10% en cada lado, el código se vería así:

<android.support.percent.PercentRelativeLayout 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"> <EditText android:layout_height="wrap_content" app:layout_widthPercent="80%" app:layout_marginStartPercent="10%" app:layout_marginEndPercent="10%"/> </android.support.percent.PercentRelativeLayout>

También puedes echar un vistazo a PercentLayoutHelper.PercentLayoutParams

¿Soporta Android% o hay una manera de aproximarse? Tengo dos tamaños de pantalla muy diferentes y, pero en porcentaje, quiero que el EditBox en la actividad tenga el mismo margen para el tamaño de la pantalla tanto como una proporción del tamaño de la pantalla. ¿Cómo se puede hacer esto?


Es posible con la Guideline introducida en ConstraintLayout.

Por ejemplo, puede colocar su parte superior de Editar texto a un 25% de la altura de la pantalla e izquierda y derecha a un 20% del ancho de la pantalla:

Aquí está la fuente de diseño:

<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"> <EditText android:id="@+id/editText" android:layout_width="0dp" android:layout_height="wrap_content" android:ems="10" android:inputType="textPersonName" android:text="Name" app:layout_constraintLeft_toLeftOf="@+id/left_guideline" app:layout_constraintRight_toLeftOf="@+id/right_guideline" app:layout_constraintTop_toTopOf="@+id/top_guideline" /> <android.support.constraint.Guideline android:id="@+id/top_guideline" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintGuide_percent="0.25" /> <android.support.constraint.Guideline android:id="@+id/left_guideline" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintGuide_percent="0.2" /> <android.support.constraint.Guideline android:id="@+id/right_guideline" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" app:layout_constraintGuide_percent="0.8" /> </android.support.constraint.ConstraintLayout>


Esto es posible en XML envolviendo su EditText dentro de un LinearLayout:

<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:weightSum="10" android:gravity="center" > <EditText android:layout_height="wrap_content" android:layout_width="0dip" android:layout_weight="8" /> </LinearLayout>


Realmente no admite valores de configuración por porcentaje (excepto por algunos de los archivos de animación xml que parecen). Si no puede utilizar un porcentaje, la mejor manera que se me ocurre es desde java call getWidth y getHeight, luego multiplique esos por su decimal y establece el resultado con setMargin (), o setPadding ().