2012-10-08 31 views
6

Edición: He recibido ya dos respuestas integrales con respecto a los márgenes fijos. Si bien he decidido por completo al uso fijo márgenes en lugar de los márgenes de peso, la pregunta original permanece abierta.centro de un LinearLayout y los márgenes "porcentaje"

Estoy tratando de obtener el siguiente diseño en Android:

Desired Layout

Un centrada lista vertical de cosas (TextViews, EditViews etc.) lo que deja aproximadamente el 10% del espacio horizontal libre como a la izquierda/margen derecho, con fondo.

Lo que intenté y no funcionó/​​trabajaron parcialmente:

  • LinearLayout, vertical, como el diseño de nivel superior. Si la gravedad se establece en "centrada", el fondo se limita al tamaño del diseño. Además, ¿cómo se establecen los márgenes porcentuales (anchuras) de esta manera?
  • LinearLayout en RelativeLayout: trabaja fondo, obras de centrado horizontal, no existen pesos.
  • LinearLayout en LinearLayout: trabaja fondo, trabajan pesos, centrado horizontal empuja todo el espacio disponible a la derecha.

(En los dos últimos casos, mi Eclipse también se queja de que uno de los diseños es redundante.)

que no he publicado, después de haberse considerado que se trata de algo más de una pregunta relacionada con el principio. ¿Cuál sería la (mejor) forma de lograr esto?

Gracias.

XML correspondiente a la última del caso de prueba:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:baselineAligned="false" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_weight="1.0" 
    android:weightSum="1.0" 
    android:background="#013c57" > 

    <LinearLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/linearLayout1" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="0.9" 
     android:layout_gravity="center" 
     android:orientation="vertical" > 

     <!-- Stuff --> 
    </LinearLayout> 
</LinearLayout> 
+0

Puede por favor compartir su archivo XML con nosotros? –

Respuesta

2

aquí está el código XML simple para la creación de este tipo de diseño de comprobar que

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:background="#000" 
    android:gravity="center"> 

    <EditText android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="10dp"/> 

    <EditText android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="10dp"/> 

    <EditText android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="10dp"/> 

    <EditText android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="10dp"/> 
</LinearLayout> 
+0

Si bien esto realmente preserva el fondo y elimina un diseño potencialmente redundante, ¿cómo logra esto los márgenes izquierdo y derecho? – TotoTitus

+0

simplemente agregando estas dos instrucciones y eliminando el android: layout_margin = "10dp", (** android: layout_marginLeft = "10dp" y android: layout_marginRight = "10dp" **) – Pratik

+0

Entiendo, tu respuesta es útil, pero no proporciona márgenes procentes o basados ​​en el peso. (Que de todos modos puede no ser una buena idea, los márgenes fijos son probablemente mejores, pero es relevante para la pregunta original). – TotoTitus

0
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:background="#000" 
    android:gravity="center"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     android:background="#000" 
     android:layout_gravity="center" 
     android:gravity="center"> 

     <EditText android:layout_width="fill_parent" 
      android:margin_left="10dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" /> 

     <EditText android:layout_width="fill_parent" 
      android:margin_left="10dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" /> 

     <EditText android:layout_width="fill_parent" 
      android:margin_left="10dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" /> 

     <EditText android:layout_width="fill_parent" 
      android:margin_left="10dp" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" /> 

    </LinearLayout> 

</LinearLayout> 

probar esto

+0

Esta solución es la misma que la de Pratik. Logra los márgenes, pero no como un porcentaje. – TotoTitus

+0

allí como cambios realizados si lo revisas – Syn3sthete

1

Puede utilizar compile 'com.android.support:percent:24.2.1'

Ahora puede utilizar PercentFrameLayout o PercentRelativeLayout. Ambos tienen los siguientes atributos:

layout_widthPercent 
layout_heightPercent 
layout_marginPercent 
layout_marginLeftPercent 
layout_marginTopPercent 
layout_marginRightPercent 
layout_marginBottomPercent 
layout_marginStartPercent 
layout_marginEndPercent 



<?xml version="1.0" encoding="utf-8"?> 
<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"> 

    <TextView 
     android:id="@+id/txt1" 
     android:background="#ff7acfff" 
     android:text="50% - 50% margin 25" 
     android:textColor="@android:color/white" 
     app:layout_marginTopPercent="10%" 
     app:layout_marginLeftPercent="10%" 
     app:layout_heightPercent="10%" 
     app:layout_widthPercent="80%" /> 

    <TextView 
     android:layout_below="@id/txt1" 
     android:id="@+id/txt2" 
     android:background="#ff7acfff" 
     android:text="50% - 50% margin 25" 
     android:textColor="@android:color/white" 
     app:layout_marginTopPercent="10%" 
     app:layout_marginLeftPercent="10%" 
     app:layout_heightPercent="10%" 
     app:layout_widthPercent="80%"/> 

    <TextView 
     android:layout_below="@id/txt2" 
     android:id="@+id/txt3" 
     android:background="#ff7acfff" 
     android:text="50% - 50% margin 25" 
     android:textColor="@android:color/white" 
     app:layout_marginTopPercent="10%" 
     app:layout_marginLeftPercent="10%" 
     app:layout_heightPercent="10%" 
     app:layout_widthPercent="80%"/> 

    <TextView 
     android:layout_below="@id/txt3" 
     android:id="@+id/txt4" 
     android:background="#ff7acfff" 
     android:text="50% - 50% margin 25" 
     android:textColor="@android:color/white" 
     app:layout_marginTopPercent="10%" 
     app:layout_marginLeftPercent="10%" 
     app:layout_heightPercent="10%" 
     app:layout_widthPercent="80%"/> 


</android.support.percent.PercentRelativeLayout> 
0

Con la introducción de ConstraintLayout, puede establecer márgenes porcentuales para sus puntos de vista restringiéndolos por pautas.

Aquí está el ejemplo:

Layout Editor

<?xml version="1.0" encoding="utf-8"?> 
<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/editText1" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     app:layout_constraintBottom_toTopOf="@+id/editText2" 
     app:layout_constraintEnd_toStartOf="@+id/endGuideline" 
     app:layout_constraintStart_toStartOf="@+id/startGuideline" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintVertical_chainStyle="packed" /> 

    <EditText 
     android:id="@+id/editText2" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20dp" 
     app:layout_constraintBottom_toTopOf="@+id/editText3" 
     app:layout_constraintEnd_toStartOf="@+id/endGuideline" 
     app:layout_constraintStart_toStartOf="@+id/startGuideline" 
     app:layout_constraintTop_toBottomOf="@+id/editText1" /> 

    <EditText 
     android:id="@+id/editText3" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20dp" 
     app:layout_constraintBottom_toTopOf="@+id/editText4" 
     app:layout_constraintEnd_toStartOf="@+id/endGuideline" 
     app:layout_constraintStart_toStartOf="@+id/startGuideline" 
     app:layout_constraintTop_toBottomOf="@+id/editText2" /> 

    <EditText 
     android:id="@+id/editText4" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="20dp" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintEnd_toStartOf="@+id/endGuideline" 
     app:layout_constraintStart_toStartOf="@+id/startGuideline" 
     app:layout_constraintTop_toBottomOf="@+id/editText3" /> 

    <android.support.constraint.Guideline 
     android:id="@+id/startGuideline" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     app:layout_constraintGuide_percent="0.1" /> 

    <android.support.constraint.Guideline 
     android:id="@+id/endGuideline" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" 
     app:layout_constraintGuide_percent="0.9" /> 

</android.support.constraint.ConstraintLayout> 
Cuestiones relacionadas