Androidレイアウトの重み


84

私はAndroid開発に不慣れで、線形レイアウトでウェイトを設定することについて質問があります。

2つのカスタムボタンとカスタム編集テキストを使用して行を作成しようとしています。編集テキストはその内容と同じだけのスペースを占める必要があり、2つのボタンは水平方向に展開して、行の残りの使用可能なスペースを埋める必要があります。このような...

| [#Button++#] [#Button--#] [et] |

何度か試みた後、これは私が望むものに到達するのに最も近いものですが、それは過度に複雑に見えます。

| [Button] [Button] [###ET###] |

<LinearLayout 
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal|center_vertical"
    android:layout_weight="1"
    >

    <LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_horizontal|center_vertical"
        >
        <RelativeLayout 
            android:id="@+id/btn_plus_container" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"
            >
            <ImageButton 
                android:layout_height="wrap_content"
                android:layout_width="fill_parent" 
                android:id="@+id/btn_plus" 
                android:background="@drawable/btn"
                android:layout_centerInParent="true"
                ></ImageButton>
            <TextView 
                android:textColor="#FAFAF4"
                android:id="@+id/tv_dice_plus" 
                android:text="@string/tv_plus" 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                ></TextView>
        </RelativeLayout>
    </LinearLayout>
    <LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_horizontal|center_vertical"
        >
        <RelativeLayout 
            android:id="@+id/btn_minus_container" 
            android:layout_width="fill_parent" 
            android:layout_height="wrap_content"
            >
            <ImageButton 
                android:layout_height="wrap_content"
                android:layout_width="fill_parent" 
                android:id="@+id/btn_minus" 
                android:background="@drawable/btn"
                android:layout_centerInParent="true"
                ></ImageButton>
            <TextView 
                android:textColor="#FAFAF4"
                android:id="@+id/btn_minus" 
                android:text="@string/tv_minus" 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                ></TextView>
        </RelativeLayout>
    </LinearLayout>
    <LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_horizontal|center_vertical"
        >
        <EditText 
            android:textColor="#FAFAF4"
            android:text="@string/et_output" 
            android:id="@+id/et_output" 
            android:layout_width="wrap_content" 
            android:layout_height="wrap_content"
            android:inputType="number"
            android:selectAllOnFocus="true" 
            android:minWidth="50sp"         
            android:maxWidth="50sp"
            android:background="@drawable/tv_black_background3"
            android:textColorHighlight="#c30505"
            ></EditText>
    </LinearLayout>
</LinearLayout>

ボタンを保持する線形レイアウトに[android:layout_weight = "2"]を設定すると、編集テキストよりも多くのスペースが必要になるはずですが、私にとっては逆で、両方とも半分のサイズになります。

| [Btn] [Btn] [#####et#####] |

私はそれらを思い出すことができないほど多くの異なる組み合わせを試しましたが、どれもうまくいきませんでした。

回答:


213

幅としてfill_parentを使用しているため、機能しません。重みは、残りの空のスペースを分散するため、または合計がLinearLayoutよりも大きい場合にスペースを取り除くために使用されます。代わりに幅を0dipに設定すると、機能します。


6
線形レイアウトの幅を0dipに設定すると、思ったように機能しました。それが選択肢だとは知りませんでした。wrap_contentが機能しないのになぜそれが機能するのかは理にかなっています。コンテンツがないときに幅をwrap_contentに設定すると、コンテンツは消えますが、0dipに設定すると、幅をゼロから必要な大きさにまで伸ばすことができます。どうもありがとうございました。
UnluckyDevil 2011

layout_widthを "fill_parent"に設定し、layout_weightを "0.2"、 "0.85"などのfloat値に設定することもできます。この場合、数値が大きいほど、ビューのサイズは小さくなります。これが許容できる方法であるかどうか説明していただけますか?
ヤー2011年

37
これは私にもうまくいきました。ありがとうございました。(私が言わなければならないことですが、他の誰かがアンドロイドレイアウトシステムを奇妙で直感的でないと感じていますか?)
感じ

ありがとう!レイアウト幅が期待どおりに表示されなかった理由を理解するのに本当に問題がありました。それを行ったのは0dip設定でした:)
marlar 2011

@tstyle androidは、簡単なことをしたい場合は簡単です。ただし、以上のことをしたい場合簡単なこと、それは非常に難しくなります。
Pacerier 2012年

14

android:Layout_weight すでに幅に固定値を付けていない場合に使用できます fill_parent

このようなことをしてください:

<Button>

Android:layout_width="0dp"
Android:layout_weight=1

-----other parameters
</Button>

7

そのように考えると、より簡単になります

ボタンが3つあり、それに応じて重みが1,3,1の場合、HTMLのテーブルのように機能します。

その行に5つの部分を提供します。ボタン1に1つの部分、ボタン2に3つの部分、ボタン1に1つの部分です。


3

linearLayoutで、WeightSum = 2を設定します。

そして、あなたが彼らに見せたいように、その子供たちに重みを分配します。私は子供たちに重み= "1"を与えました。それで、両方が全体の半分を分配します。

 <LinearLayout
    android:id="@+id/linear1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="2"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/ring_oss"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/ring_oss" />

    <ImageView
        android:id="@+id/maila_oss"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:src="@drawable/maila_oss" />
</LinearLayout>

2

重み値0-1は、重み値に比例して(layout_width = "0px"を設定した後)使用可能なスペースの分布を共有します。ウェイトが指定されていない(ウェイトエントリがない)ビュー要素は、ウェイト0を取得します。これは、拡張が行われないことを意味します。

ウェイトエントリを必要としない簡単な代替方法は、テキスト付きのビューにマーキーをアタッチして、テキストに必要な最小値(wrap_content)から使用可能なスペースに拡張するように指示することです。EditText:android:layout_width = "wrap_content" android:ellipsize = "marquee"


0

EditTextsの幅をに設定し、幅がで重量が1に設定さwrap_contentれている2つのボタンを配置するLinearLayoutとしますfill_parent


0

私が見つけたもう1つの理由(聞こえるかもしれませんがあいまいです)。以下は動作しませんでした。

LinearLayout垂直

LinearLayoutの高さfillparent +重量

LinearLayoutの高さfillparent +重量

LinearLayoutの高さfillparent +重量

EndLinearLayout

何がうまくいったのか

相対レイアウト

LinearLayout垂直

LinearLayoutの高さfillparent +重量

LinearLayoutの高さfillparent +重量

LinearLayoutの高さfillparent +重量

EndLinearLayout

EndRelativeLayout

線形のルートレイアウトではあいまいに聞こえ、その下の重みは機能しませんでした。そして、私が「機能しなかった」と言うとき、私がさまざまな解像度の間のグラフィックレイアウトを見た後、画面の一貫性が大きく壊れたことを意味します。


0
<LinearLayout
    android:id="@+id/linear1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="9"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/ring_oss"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:src="@drawable/ring_oss" />

    <ImageView
        android:id="@+id/maila_oss"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:src="@drawable/maila_oss" />
<EditText
        android:id="@+id/edittxt"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:src="@drawable/maila_oss" />
</LinearLayout>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.