2012-05-10 3 views
6

Attualmente sto facendo uno speciale layout xml di uno schermo orizzontale, in cui sono presenti 4 immagini e 2 LinearLayout sono uno accanto all'altro con 2 immagini ciascuno. Questi LinearLayouts chiamo linearLayout1 e linearLayout2.Fare due LinearLayouts hanno il 50% dello schermo ciascuno senza usare layout_weight

linearLayout1 è contrassegnato con rettangolo blu:

linearLayout1

linearLayout2 è contrassegnato con rettangolo blu:

linearLayout2

Come si può vedere, il primo si usa ~ 80% del schermo, mentre il secondo utilizza ciò che è rimasto. Non voglio questo naturalmente, voglio il 50% per ciascuno. Non riesco a utilizzare layout_weight perché è già utilizzato negli stessi LinearLayouts (il posizionamento delle due immagini) e i pesi nidificati fanno male alle prestazioni.

Ho provato molte varianti diverse, ma semplicemente non riesco a ottenere che i due LinearLayout abbiano il 50% dello schermo ciascuno. Ecco il codice:

<?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

Vorrei usare nested layout_weight comunque. la performance non sarà poi così male. –

risposta

21

Beh, ci sono due opzioni I vedi disponibile qui.

  1. Avvitare l'avviso LINT e utilizzare comunque i pesi nidificati. I telefoni sono veloci e faranno dei millisecondi che valgono la differenza dato che si gonfiano solo i layout una volta (la maggior parte delle volte). Avere layout nidificati è solo un male per le prestazioni perché il gonfiatore deve fare più passaggi per misurare i layout.

  2. Scambia la tua top LinearLayout con un RelativeLayout e allineare i due figli a un invisibile View nel centro in questo 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 per il commento di avviso LINT (mi sono sentito così per molto tempo). E una soluzione ragionevole – Barak

+0

Stai parlando del mio "top linearlayout", quale intendi? Il mio layout di cima è un relativelayout. – eightx2

+0

Ho pensato che stavi chiedendo modi per dividere un layout all'interno di un 'LinearLayout' senza l'uso di pesi. Dato che hai già i tuoi due layout in 'RelativeLayout', allora sei già in parte alla soluzione n. 2. Crea una terza visione invisibile centrata sul 'LinearLayout padre 'e allinea gli altri due a quello. – DeeV

0

Se si sta cercando di evitare l'uso di una funzione per lo scopo previsto probabilmente si dovrebbe considerare se il tuo approccio non è l'ideale ... Sembra che si sta cercando di organizzare gli elementi in righe e colonne. Prova a utilizzare un TableLayout.

0

Senza layout_weight, mettere entrambi questi linearlayouts in un genitore LinearLayout

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

centro utilizzando layout_gravity, se il contenuto di tali linearlayouts sono della stessa dimensione, dovrebbero essere le stesse dimensioni

se no, allora si potrebbe ancora avere un problema

e potrebbe essere necessario ridimensionare utilizzando il codice

3

È possibile impostare "peso" per il layout, come questo:

<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> 

così ogni linearlyouts prendere il 50% dei lo schermo. :)