2012-05-10 58 views
6

Actualmente estoy haciendo un diseño especial de xml de una pantalla de paisaje, donde 4 imágenes están presentes y 2 LinearLayouts están uno junto al otro con 2 imágenes cada uno. Estos LinearLayouts llamo a linearLayout1 y linearLayout2.Al hacer dos LinearLayouts tengo el 50% de la pantalla cada uno sin usar layout_weight

linearLayout1 está marcado con un rectángulo azul:

linearLayout1

linearLayout2 está marcado con un rectángulo azul:

linearLayout2

Como se puede ver, utiliza la primera ~ 80% de la pantalla, mientras que el segundo usa lo que queda. No quiero esto, por supuesto, quiero un 50% para cada uno. No puedo usar layout_weight porque ya se usa en los LinearLayouts mismos (posicionamiento de las dos imágenes) y los pesos anidados son malos para el rendimiento.

He intentado muchas variaciones diferentes, pero simplemente no puedo conseguir que los dos LinearLayouts tengan el 50% de la pantalla cada uno. Aquí está el código:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/db1_root" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="horizontal" > 

<LinearLayout 
    android:id="@+id/title_container" 
    style="@style/TitleBar" > 

    <ImageView 
     style="@style/TitleBarLogo" 
     android:contentDescription="@string/imgViewDesc" 
     android:src="@drawable/title_logo" /> 

    <ImageView 
     style="@style/TitleBarSeparator" 
     android:contentDescription="@string/imgViewDesc" /> 

    <TextView style="@style/TitleBarText" /> 

    <ImageButton 
     style="@style/TitleBarAction" 
     android:contentDescription="@string/imgViewDesc" 
     android:onClick="onClickAbout" 
     android:src="@drawable/title_about" /> 
</LinearLayout> 

<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/title_container" 
    android:layout_above="@+id/mobFoxView" > 

    <!-- LEFT COLUMN --> 

    <LinearLayout 
     android:id="@+id/linearLayout1" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_above="@+id/mobFoxView" 
     android:layout_alignParentLeft="true" 
     android:layout_toLeftOf="@+id/linearLayout2" 
     android:background="@color/white" 
     android:gravity="center" 
     android:orientation="vertical" 
     android:weightSum="2" > 

     <ImageView 
      android:id="@+id/imgNews" 
      android:layout_width="wrap_content" 
      android:layout_height="0dp" 
      android:layout_weight="1" 
      android:contentDescription="@string/imgViewDesc" 
      android:onClick="onClickFeature" 
      android:src="@drawable/front_news_1" /> 

     <ImageView 
      android:id="@+id/imgReleases" 
      android:layout_width="wrap_content" 
      android:layout_height="0dp" 
      android:layout_weight="1" 
      android:contentDescription="@string/imgViewDesc" 
      android:onClick="onClickFeature" 
      android:src="@drawable/front_releases_1" /> 
    </LinearLayout> 

    <!-- RIGHT COLUMN --> 

    <LinearLayout 
     android:id="@+id/linearLayout2" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:layout_above="@+id/mobFoxView" 
     android:layout_alignParentRight="true" 
     android:layout_alignTop="@id/linearLayout1" 
     android:background="@color/white" 
     android:gravity="center" 
     android:orientation="vertical" 
     android:weightSum="2" > 

     <ImageView 
      android:id="@+id/imgArtists" 
      android:layout_width="wrap_content" 
      android:layout_height="0dp" 
      android:layout_weight="1" 
      android:contentDescription="@string/imgViewDesc" 
      android:onClick="onClickFeature" 
      android:src="@drawable/front_artists_1" /> 

     <ImageView 
      android:id="@+id/imgLabels" 
      android:layout_width="wrap_content" 
      android:layout_height="0dp" 
      android:layout_weight="1" 
      android:contentDescription="@string/imgViewDesc" 
      android:onClick="onClickFeature" 
      android:src="@drawable/front_labels_1" /> 
    </LinearLayout> 
</RelativeLayout> 

<com.mobfox.sdk.MobFoxView 
    android:id="@+id/mobFoxView" 
    android:layout_width="fill_parent" 
    android:layout_height="50dp" 
    android:layout_alignParentBottom="true" 
    mode="test" 
    publisherId="@string/mobFoxID" /> 

</RelativeLayout> 
+0

Yo usaría layout_weight anidado de todos modos. el rendimiento no será tan malo. –

Respuesta

21

Bueno, hay dos opciones me ver disponible aquí.

  1. Atornille esa advertencia LINT y utilice los pesos anidados de todos modos. Los teléfonos son rápidos y supondrán una diferencia de milisegundos, ya que solo se inflan los diseños una vez (la mayoría de las veces). Tener diseños anidados solo es malo para el rendimiento porque el inflador necesita hacer más pases para medir los diseños.

  2. cambiar de sitio la parte superior LinearLayout con un RelativeLayout y alinear a los dos niños a un invisible View en el centro de este modo:

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/top" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <LinearLayout 
     android:id="@+id/center_point" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:layout_centerInParent="true"/> 

    <LinearLayout 
     android:id="@+id/left_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentLeft="true" 
     android:layout_alignRight="@+id/center_point"> 
    </LinearLayout> 


    <LinearLayout 
     android:id="@+id/right_layout" 
     android:orientation="horizontal" //default 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentRight="true" 
     android:layout_alignLeft="@+id/center_point"> 
    </LinearLayout> 

</RelativeLayout> 
+0

+1 para el comentario de advertencia LINT (me he sentido así durante mucho tiempo). Y una solución razonable – Barak

+0

Estás hablando de mi "diseño lineal superior", ¿a qué te refieres? Mi diseño superior es un diseño relativo. – eightx2

+0

Pensé que estabas preguntando formas de dividir un diseño dentro de un "LinearLayout" sin el uso de pesas. Como ya tienes tus dos diseños en un 'RelativeLayout', entonces ya estás en el camino hacia la solución n. ° 2. Cree una tercera, invisible, Vista centrada en el elemento primario "LinearLayout" y alinee las otras dos con esa. – DeeV

0

Si usted está tratando de evitar el uso de una característica para los fines previstos probablemente debería considerar si su enfoque es no ideal ... Parece que usted está tratando de organizar los elementos en filas y columnas. Intenta usar un TableLayout.

0

Sin layout_weight, poner estos dos linearlayouts en una matriz LinearLayout

<LinearLayout orientation:horizontal> 
      <LinearLayout Child 1 /> 
      <LinearLayout Child 2 /> 
</LinearLayout> 

centro de ellos utilizando layout_gravity, si el contenido de esos linearlayouts son del mismo tamaño, deben ser del mismo tamaño

si no es así, entonces usted todavía podría tener un problema

y puede que tenga que cambiar el tamaño utilizando el código

3

Puede establecer "peso" de los diseños, al igual esto:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" > 
    <LinearLayout android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="1"> 
    </LinearLayout> 
    <LinearLayout android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="1"> 
    </LinearLayout> 

por lo que cada linearlyouts tomar el 50% de la pantalla. :)

Cuestiones relacionadas