2012-05-10 11 views
6

私は現在、4つの画像が存在し、2つのLinearLayoutsがそれぞれ2つの画像で隣り合っている横画面の特殊なxmlレイアウトを行っています。これらのLinearLayouts私はlinearLayout1linearLayout2を呼び出します。layout_weightを使用しないで2つのLinearLayoutsをそれぞれ画面の50%にする

linearLayout1は青い四角形でマークされています

​​

linearLayout2が青い矩形でマークされている:あなたが見ることができるように

linearLayout2

、最初の1は、の〜80%を使用していますもう一方は残っているものを使います。私はこれを望んでいない、私はそれぞれの50%が欲しい。 layout_weightを使用することはできません.LinearLayouts自体(2つの画像の位置付け)で既に使用されており、ネストされた重みはパフォーマンスに悪いためです。

私はさまざまなバリエーションを試しましたが、2つの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. とにかくネストされた重さを警告して使用してください。携帯電話は高速で、レイアウトを1回(ほとんどの場合)膨らませるだけで、何百万分の1の価値があります。レイアウトを測定するためには、インフレータがより多くのパスを作成する必要があるため、ネストされたレイアウトを持つことはパフォーマンスに悪影響を与えます。

  2. スワップあなたRelativeLayoutでトップLinearLayoutなどのように中央に見えないViewに2人の子供を揃える:

<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のLINT警告コメント(私は長い間そのように感じました)。合理的な解決策 – Barak

+0

あなたは私の「トップラインレイアウト」についてお話しています。私の一番のレイアウトは、相対的なものです。 – eightx2

+0

私は、あなたがウェイトを使用せずに 'LinearLayout'内のレイアウトを分割する方法を求めていると思っていました。すでにRelativeLayoutに2つのレイアウトがあるので、あなたはすでに解決策#2に参加しています。 3番目の目に見えないViewを作成します。これは、親 'LinearLayout'の中央に配置され、他の2つはそのものに揃えられます。 – DeeV

0

あなたのアプローチは非理想的であるならば、あなたはおそらく、検討すべき所期の目的のために機能を使用しないようにしようとしている場合は...あなたはにアイテムを整理しようとしているように思え行と列。 TableLayoutをお試しください。 layout_weightなし

0

、それらlinearlayoutsの内容は同じ大きさであれば、彼らは同じサイズである必要があり、それらはlayout_gravityを使用して

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

センターの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> 

したがって、各直線出力は、50%の スクリーン。 :)

関連する問題