2016-04-28 7 views
0

(3つの要素は、一つは画面いっぱいに育てる必要があります):アンドロイドlayout_weight混乱、私は次のようなレイアウトを実現したいと思います

enter image description here

リストビューLV1は、その内容をラップトップに滞在する必要があります。 LinearLayout LL3はコンテンツをラップし、下部に留まります。 ListView LV2は、残りの画面を埋める必要があります。

LV2に画面を埋めるのに十分なエントリがあれば問題ありません。しかし、LV2が例えば2つ又は0の要素のみを含む場合、LL3はシフトアップする。

ListViewの要素数に関係なく、LV2が常に画面に表示され、LL3が下部にとどまるようにするには、何を変更する必要がありますか?ここで

は私のレイアウトです:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

    <ListView 
     android:id="@+id/LV1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="@dimen/activity_vertical_margin" 
     android:layout_weight="0" 
     android:drawSelectorOnTop="true"></ListView> 

    <ListView 
     android:id="@+id/LV2" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_marginTop="@dimen/activity_vertical_margin" 
     android:layout_weight="1"></ListView> 


    <LinearLayout 
     android:id="@+id/LL3" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="0" 
     android:orientation="horizontal"> 

     <Button 
      android:id="@+id/button_cancel" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="@string/Button_Cancel" 

      /> 

     <Button 
      android:id="@+id/button_save" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="@string/Button_Save" 

      /> 

    </LinearLayout> 


</LinearLayout> 

答えて

2

あなたがRelativeLayoutにラッピングLinearLayoutを変更する必要があり、下部に自分自身を修正するために、あなたのLL3を言うことができないので:

//pseudo code: 
<RelativeLayout> 
    <LV1 
     android:alignParentTop="true"/> 
    <LV2 
     android:layout_below="@+id/lv1" 
     android:layout_above="@+id/ll3"/> 
    <LL3 
     android:alignParentBottom="true"/> 
</RelativeLayout> 
+0

完璧、ありがとう! – user1195883

0

より良いアプローチをされましたLinearLayoutではなくRelativeLayoutを使用します。しかし、LinearLayoutでこれを実現することもできます。以下のサンプルコードを参照してください。

<?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:weightSum="1"> 


<LinearLayout 
    android:id="@+id/LL1" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.1" 
    android:background="@android:color/highlighted_text_dark" 
    android:orientation="vertical"> 


</LinearLayout> 

<LinearLayout 
    android:id="@+id/LL2" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.8" 
    android:background="@android:color/suggestion_highlight_text" 
    android:orientation="vertical"> 


</LinearLayout> 

<LinearLayout 
    android:id="@+id/LL3" 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.1" 
    android:background="@android:color/perms_costs_money" 
    android:orientation="vertical"> 


</LinearLayout> 

</LinearLayout> 

このコードの出力は次のようになります。

enter image description here

あなたはweightSumし、要件ごとのように親のLinearLayoutのチャイルズの数を変更することができます。

0

使用weightSum適切に、あなたはそこに3つのテキストフィールドがあり、他は何の重みを与えられていない間、彼ら二人は、1の重みを宣言した場合、それは

、この

<LinearLayout 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" 
    android:orientation="vertical" 
    android:weightSum="11" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

    <ListView 
     android:id="@+id/LV1" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_marginTop="@dimen/activity_vertical_margin" 
     android:layout_weight="2" 
     android:drawSelectorOnTop="true" /> 

    <View //this view is added just to separate listiview 
     android:id="@+id/view1" 
     android:layout_width="match_parent" 
     android:layout_height="2dp" 
     android:background="#000000" /> 

    <ListView 
     android:id="@+id/LV2" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_marginTop="@dimen/activity_vertical_margin" 
     android:layout_weight="8" /> 

    <View //this view is added just to separate listiview 
     android:id="@+id/view2" 
     android:layout_width="match_parent" 
     android:layout_height="2dp" 
     android:background="#000000" /> 

    <LinearLayout 
     android:id="@+id/LL3" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" 
     android:orientation="horizontal"> 

     <Button 
      android:id="@+id/button_cancel" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="@string/Button_Cancel" /> 

     <Button 
      android:id="@+id/button_save" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1" 
      android:text="@string/Button_Save" /> 
    </LinearLayout> 

</LinearLayout> 
+0

この回答を確認してもらえますか?@ user1195883 –

+0

これを書いていただきありがとうございます。上記の@amyからの答えははるかに簡単で、完璧に動作しています。 – user1195883

+0

RelativeLayoutで必要な結果が得られないことがあります。 –

0

を確認してください取得します体重のない第3のテキストフィールドは成長せず、そのコンテンツに必要な領域のみを占有します。他の2つは、3つのフィールドがすべて測定された後、残りのスペースを満たすように等しく拡張されます。 3番目のフィールドに2の重み(0ではなく)が指定されている場合は、他のフィールドよりも重要であると宣言されるため、残っている領域の半分が得られます。

関連する問題