7

内部に 3 つのビューがある水平 LinearLayout があります。それぞれの layout_width は 0dp に設定され、異なる重みが設定されています。それらはすべて、layout_height に wrap_content が設定されています。

私が抱えている問題は、それらの1つがラップすると、他のものがLinearLayoutの全高を埋めなくなることです(背景があるため、これは見苦しく見えます)。

必要に応じてコンテンツをラップできるようにしながら、LinearLayout の残りの垂直方向のスペースをすべて埋めるようにしたいと考えています。基本的には、一番背の高い兄弟の身長に合わせたいと思っています。

layout_gravity を「fill」と「fill_vertical」に設定しようとしましたが、何もしません。

レイアウトの例を次に示します。

<LinearLayout
            android:id="@+id/LinearLayout1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@android:color/background_dark"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/job"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="fill"
                android:layout_margin="1dp"
                android:layout_weight="4"
                android:background="@drawable/btn_bkgnd_dark_grey"
                android:drawableLeft="@drawable/icon_plus"
                android:onClick="jobPressed"
                android:padding="5dp"
                android:text="Add to Job fgh dfhfg "
                android:textAppearance="@style/rowitem_notes"
                android:textColor="@android:color/white" />

            <ImageButton
                android:id="@+id/bookmark"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="fill"
                android:layout_margin="1dp"
                android:layout_weight="2"
                android:background="@drawable/btn_bkgnd_dark_grey"
                android:onClick="bookmarkPressed"
                android:padding="5dp"
                android:src="@drawable/icon_bookmark" />

            <Button
                android:id="@+id/itemDetailsButton"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="fill"
                android:layout_margin="1dp"
                android:layout_weight="4"
                android:background="@drawable/btn_bkgnd_dark_grey"
                android:drawableRight="@drawable/icon_info"
                android:onClick="itemDetailsPressed"
                android:padding="5dp"
                android:text="Item Details"
                android:textAppearance="@style/rowitem_notes"
                android:textColor="@android:color/white" />

        </LinearLayout>
4

3 に答える 3

18

レイアウトを修正しました。子ビューのコンテンツをラップする代わりに、fill_parent を使用します。デフォルトの Android ドローアブルと色を使用しましたが、それを独自のドローアブルとスタイルに置き換えます。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout1"
style="@android:style/ButtonBar"
android:layout_width="fill_parent"
android:gravity="center"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<Button
    android:id="@+id/job"
    android:layout_width="0dip"
    android:layout_height="fill_parent"
    android:layout_gravity="center"
    android:layout_margin="2dp"
    android:layout_weight="4"
    android:background="#33B5E5"
    android:drawableLeft="@android:drawable/btn_star"
    android:onClick="jobPressed"
    android:padding="5dp"
    android:text="Add to Job fgh"
    android:textColor="@android:color/white"
    android:textSize="10sp" />

<ImageButton
    android:id="@+id/bookmark"
    android:layout_width="0dip"
    android:layout_height="fill_parent"
    android:layout_gravity="center"
    android:layout_margin="2dp"
    android:layout_weight="1"
    android:background="#33B5E5"
    android:onClick="bookmarkPressed"
    android:padding="5dp"
    android:scaleType="fitCenter"
    android:src="@android:drawable/ic_input_add" />

<Button
    android:id="@+id/itemDetailsButton"
    android:layout_width="0dip"
    android:layout_height="fill_parent"
    android:layout_gravity="center"
    android:layout_margin="2dp"
    android:layout_weight="4"
    android:background="#33B5E5"
    android:drawableRight="@android:drawable/ic_delete"
    android:onClick="itemDetailsPressed"
    android:padding="5dp"
    android:text="Item Details"
    android:textColor="@android:color/white"
    android:textSize="10sp" />

</LinearLayout>
于 2013-05-09T06:15:42.557 に答える
1

あなたは次のように言います。どちらが最も背の高い兄弟になるかわからない場合は、基本的に次のようなプログラムで実行する必要があります。

  1. 最初に、次のように各ウィジェットの高さを取得します。

    int height = widget.getHeight();  //with this you know which is the tallest one
    
  2. 次に、最も高いビューに応じてスケーリングする必要があるビューに layout_alignTop 属性を設定するために、RelativeLayout パラメータを作成します。明らかに align_Top は最も高いビューの ID を参照しています

    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
    layout.setLayoutParams(params);         
    params.addRule(RelativeLayout.ALIGN_TOP,R.id.tallest_widget);
    widget.setLayoutParams(params);
    
  3. これですべてですが、このソリューションでは、LinearLayout の代わりに RelativeLayout を使用してこれを行う必要があることを考慮してください。

柔軟性があるため、これが解決策だと思いRelativeLayoutます。この場合、参照に応じてビューの上部を揃えることができます(つまり、最も高いビュー)。

于 2013-05-09T02:30:33.923 に答える
0

この場合、次のようにする必要があると思います: 最初はすべてのボタンに背景があるので、すべてのビューの高さを知っておくべきだったと思います。たぶん、これらのようにして、LinearyLayout にmaxHeight/minHeightまたは 固定値を指定layout_height="match_parent"してから、サブビューで を使用できます。コード内で実用的に Ui を調整する必要がない限り。

于 2013-05-09T02:13:36.093 に答える