2012-05-10 56 views
6

我目前正在做一個特殊的橫向屏幕xml佈局,其中4個圖像存在和2個LinearLayouts彼此相鄰,每個圖像2個圖像。這些LinearLayouts我呼叫linearLayout1linearLayout2使兩個LinearLayouts有每個屏幕的50%,而不使用layout_weight

linearLayout1標有藍色矩形:

​​

linearLayout2標有藍色矩形:

linearLayout2

正如你所看到的,第一個使用〜的80%屏幕,而第二個使用剩下的東西。我當然不想要這個,我想每個人都要50%。我無法使用layout_weight,因爲它已經用於LinearLayouts本身(定位兩個圖像)並且嵌套權重對性能不利。

我已經嘗試了很多不同的變化,但我根本無法讓兩個LinearLayouts每個都有50%的屏幕。下面的代碼:

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

無論如何,我會使用嵌套的layout_weight。表現不會那麼糟糕。 –

回答

21

那麼,有兩個選項來調整我看到這裏可用。

  1. 擰LINT警告並使用嵌套的權重。手機速度很快,它會使毫秒的差異,因爲你只有一次(大部分時間)充氣佈局。嵌套佈局僅對性能不利,因爲充氣機需要通過更多通道來測量佈局。

  2. 交換你最LinearLayoutRelativeLayout並對準兩個孩子一種無形的View在中心像這樣:

<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

LINT警告評論+1(我已經有這麼長時間的感覺)。一個合理的解決方案 – Barak

+0

你在說我的「頂級線性佈局」,你是指哪一個?我的頂部佈局是一個相關佈局。 – eightx2

+0

我以爲你問的方法是在不使用權重的情況下在「LinearLayout」中劃分佈局。由於您已經在「RelativeLayout」中使用了兩種佈局,因此您已經成爲解決方案#2的一部分。創建第三個不可見的視圖,該視圖以父'LinearLayout'爲中心,並將其他兩個視圖對齊到該視圖。 – DeeV

0

如果你想避免使用功能,其預期目的,你如果你的做法是不理想的可能應該考慮...好像你正在試圖將項目安排成行和列。嘗試使用TableLayout

0

沒有layout_weight,就​​把這兩個linearlayouts到父LinearLayout中使用layout_gravity他們

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

中心,如果這些linearlayouts的內容都是一樣的大小,他們應該是相同的大小

如果沒有,那麼你仍然可以有一個問題

,可能需要使用代碼

3

您可以設置「權重」的佈局,像這個:

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

所以每個linearlyouts需要50%的 屏幕。 :)

相關問題