私はいつもAndroidのドキュメントでこのおもしろい重みの値について読みました。今、私は初めてそれを試してみたいのですが、それはまったく機能していません。
このレイアウトの説明からわかるように、
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal">
<Button
Android:text="Register"
Android:id="@+id/register"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:padding="10dip"
weight="1" />
<Button
Android:text="Not this time"
Android:id="@+id/cancel"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:padding="10dip"
weight="1" />
</LinearLayout>
水平に配置され、スペースを均等に共有する2つのボタンを作成する必要があります。問題は、2つのボタンがスペースを埋めるために大きくならないことです。
ボタンを大きくして行全体を埋めたいと思います。両方のボタンが親と一致するように設定されている場合、最初のボタンだけが表示され、行全体に表示されます。
layout_weight
プロパティを設定していません。あなたのコードはweight="1"
を読み、それはAndroid:layout_weight="1"
を読むべきです。
覚えておくべき3つのこと:
例:
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:weightSum="5">
<Button
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:text="1" />
<Button
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="3"
Android:text="2" />
<Button
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:text="3" />
</LinearLayout>
そしてその結果:
それはAndroid:layout_weight
です。 weightはLinearLayout
でのみ使用できます。 linearlayoutの向きがVerticalの場合はAndroid:layout_height="0dp"
を、向きが水平の場合はAndroid:layout_width = "0dp"
を使用します。それは完璧に機能します。
この画像は線形レイアウトを要約したものです。
トピックの詳細についてはこのリンクをたどることができます。 ちょうど数学 - ビュー、ビューグループ、レイアウト
リニアレイアウトのビデオチュートリアル:幅、高さ、重さ
両方のボタンのlayout_width
を "0dip"に、両方のボタンのweight
を0.5
に設定してみてください。
LinearLayoutは個々の子供に重みを割り当てることをサポートします。この属性は、ビューに "important"値を割り当て、親ビューの残りのスペースを埋めるように拡張できるようにします。デフォルトの重みはゼロです
子の間に任意の残り/追加のスペースを割り当てる計算。 (総スペースではありません)
子供に割り当てるスペース=(子供の個別の体重)/(リニアレイアウトのすべての子供の体重の合計)
例(1):3つのテキストボックスがあり、そのうちの2つがウェイト1を宣言し、3つ目がウェイトなし(0)の場合その後、残り/追加のスペースを割り当てる
1st text box = 1/(1+1+0)
2nd text box = 1/(1+1+0)
3rd text box = 0/(1+1+0)
例(2):横一列にテキストラベルと2つのテキスト編集要素があるとしましょう。ラベルにはlayout_weightが指定されていないため、レンダリングに必要な最小スペースが占有されます。 2つのテキスト編集要素のそれぞれのlayout_weightが1に設定されている場合、親レイアウトの残りの幅はそれらの間で均等に分割されます(これらが等しく重要であると主張しているため)。
calculation :
1st label = 0/(0+1+1)
2nd text box = 1/(0+1+1)
3rd text box = 1/(0+1+1)
最初の1つのテキストボックスのlayout_weightが1で、2番目のテキストボックスのlayout_weightが2の場合、残りのスペースの3分の1が最初のスペースに、3分の2が2番目のスペースに割り当てられます。より重要)。
calculation :
1st label = 0/(0+1+2)
2nd text box = 1/(0+1+2)
3rd text box = 2/(0+1+2)
Buttonのwidthフィールドで、wrap-content
を0dp
に置き換えます。
ビューのlayout_weight属性を使用してください。
Android:layout_width="0dp"
これはあなたのコードがどのように見えるかです:
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal">
<Button
Android:text="Register"
Android:id="@+id/register"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:padding="10dip"
Android:layout_weight="1" />
<Button
Android:text="Not this time"
Android:id="@+id/cancel"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:padding="10dip"
Android:layout_weight="1" />
</LinearLayout>
layout_weightは、余ったスペースをプロポーションに配分するために使用されます。この場合、2つのボタンの幅は "0dp"です。したがって、残りのスペースはそれらの間で1:1の比率に分割されます。つまり、スペースはボタンビュー間で均等に分割されます。
@ Manoj Seelan の回答のように
Android:layout_weight
をAndroid:weight
に置き換えます。
LinearLayout
と共にWeightを使うとき。 weightSum
にLinearLayout
を追加する必要があります。また、LinearLayout
の向きに応じて、Width/Heightに0dp
をすべてのLinearLayout
の子ビューに設定する必要があります。
例:
ifLinearlayout
の向きがVertical
である場合、すべてのLinearLayout
の子ビューの幅を設定0dp
を持つビュー
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical"
Android:weightSum="3">
<Button
Android:text="Register"
Android:id="@+id/register"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:padding="10dip"
Android:layout_weight="2" />
<Button
Android:text="Not this time"
Android:id="@+id/cancel"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:padding="10dip"
Android:layout_weight="1" />
</LinearLayout>
の向きLinearlayout
がhorizontal
の場合、すべてのLinearLayout
`s ChildrenビューのSet Heightは0dp
で表示されます。
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:weightSum="3">
<Button
Android:text="Register"
Android:id="@+id/register"
Android:layout_width="wrap_content"
Android:layout_height="0dp"
Android:padding="10dip"
Android:layout_weight="2" />
<Button
Android:text="Not this time"
Android:id="@+id/cancel"
Android:layout_width="wrap_content"
Android:layout_height="0dp"
Android:padding="10dip"
Android:layout_weight="1" />
</LinearLayout>
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/logonFormButtons"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:baselineAligned="true"
Android:orientation="horizontal">
<Button
Android:id="@+id/logonFormBTLogon"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="@string/logon"
Android:layout_weight="0.5" />
<Button
Android:id="@+id/logonFormBTCancel"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="@string/cancel"
Android:layout_weight="0.5" />
</LinearLayout>
おそらく、両方のボタンのlayout_widthプロパティを "fill_parent"に設定するとうまくいくでしょう。
このコードをテストしたところ、エミュレータで動作します。
<LinearLayout Android:layout_width="fill_parent"
Android:layout_height="wrap_content">
<Button Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:text="hello world"/>
<Button Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:text="goodbye world"/>
</LinearLayout>
両方のボタンで必ずlayout_widthを "fill_parent"に設定してください。
あなたはこのように書く必要があります
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
Android:weightSum="2">
<Button
Android:text="Register"
Android:id="@+id/register"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:padding="10dip"
Android:layout_weight="1" />
<Button
Android:text="Not this time"
Android:id="@+id/cancel"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:padding="10dip"
Android:layout_weight="1" />
加えて、LinerLayout
の子ビュー[Button views]にこのAndroid:layout_width="0dp"
を追加する必要があります。
上記のXMLでは、線形レイアウトのAndroid:layout_weight
を2
に設定します。Android:layout_weight="2"
以下は、(BOLDでマークされた)コードの変更点です。
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal">
<Button
Android:text="Register"
Android:id="@+id/register"
Android:layout_width="0dp" //changes made here
Android:layout_height="wrap_content"
Android:padding="10dip"
Android:layout_weight="1" /> //changes made here
<Button
Android:text="Not this time"
Android:id="@+id/cancel"
Android:layout_width="0dp" //changes made here
Android:layout_height="wrap_content"
Android:padding="10dip"
Android:layout_weight="1" /> //changes made here
</LinearLayout>
LinearLayoutは水平方向の向きを持っているので、その方向にウェイトを使用するためには幅を0dp。に保つ必要があります。 (向きが垂直の場合、身長は0dpに保たれます)。
2つのビューがあり、両方のビューにAndroid:layout_weight="1"
を配置したので、それは2つのビューを水平方向に(または幅で)均等に分割することを意味します。
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content">
<Button
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_weight="2"
Android:text="Button 1" />
<Button
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_weight="3"
Android:text="Button 2" />
<Button
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:layout_weight="2"
Android:text="Button 3" />
</LinearLayout>
wrap_content
をfill_parent
に置き換えます。
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_gravity="center"
Android:background="#008">
<RelativeLayout
Android:id="@+id/paneltamrin"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:gravity="center"
>
<Button
Android:id="@+id/BtnT1"
Android:layout_width="wrap_content"
Android:layout_height="150dp"
Android:drawableTop="@Android:drawable/ic_menu_edit"
Android:drawablePadding="6dp"
Android:padding="15dp"
Android:text="AndroidDhina"
Android:textColor="#000"
Android:textStyle="bold" />
</RelativeLayout>
<RelativeLayout
Android:id="@+id/paneltamrin2"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:gravity="center"
>
<Button
Android:layout_width="wrap_content"
Android:layout_height="150dp"
Android:drawableTop="@Android:drawable/ic_menu_edit"
Android:drawablePadding="6dp"
Android:padding="15dp"
Android:text="AndroidDhina"
Android:textColor="#000"
Android:textStyle="bold" />
</RelativeLayout>
</LinearLayout>
これはあなたの問題の完璧な答えです
<LinearLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal" >
<Button
Android:text="Register" Android:id="@+id/register"
Android:layout_width="wrap_content" Android:layout_height="wrap_content"
Android:padding="10dip" weight="1" />
<Button
Android:text="Not this time" Android:id="@+id/cancel"
Android:layout_width="wrap_content" Android:layout_height="wrap_content"
Android:padding="10dip" weight="1" />
</LinearLayout>