この属性の使い方がわかりません。誰もがそれについてもっと教えてもらえますか?
layout_weight
を使うと、複数のビュー間のサイズ比を指定できます。例えば。あなたはMapView
とtable
を持っています。それらは地図に追加情報を表示します。マップは画面の3/4を使用し、テーブルは画面の1/4を使用する必要があります。それからmap
のlayout_weight
を3に、そしてtable
のlayout_weight
を1に設定します。
うまく機能させるには、(向きに応じて)高さまたは幅を0pxに設定する必要があります。
一言で言えば、layout_weight
は、レイアウト内でビューに割り当てる追加スペースの量を指定します。
LinearLayoutは個々の子供に重みを割り当てることをサポートします。この属性は、ビューに「重要度」の値を割り当て、親ビューの残りのスペースを埋めるように拡張することを可能にします。ビューのデフォルトの重みはゼロです。
一般に、式は次のとおりです。
子供に割り当てられたスペース=(子供の個々の体重)/(リニアレイアウト内のすべての子供の体重の合計)
3つのテキストボックスがあり、そのうちの2つが1のウェイトを宣言し、3番目のテキストボックスにウェイト(0)が指定されていない場合、残りのスペースは次のように割り当てられます。
最初のテキストボックス= 1 /(1 + 1 + 0)
2番目のテキストボックス= 1 /(1 + 1 + 0)
3番目のテキストボックス= 0 /(1 + 1 + 0)
横一列にテキストラベルと2つのテキスト編集要素があるとしましょう。ラベルにはlayout_weight
が指定されていないため、レンダリングに必要な最小スペースを占有します。 2つのテキスト編集要素のそれぞれのlayout_weight
が1に設定されている場合、親レイアウトの残りの幅はそれらの間で均等に分割されます(それらが同様に重要であると主張するため)。
計算:
第1ラベル= 0 /(0 + 1 + 1)
2番目のテキストボックス= 1 /(0 + 1 + 1)
3番目のテキストボックス= 1 /(0 + 1 + 1)
代わりに、最初の1つのテキストボックスのlayout_weight
が1で、2番目のテキストボックスのlayout_weight
が2であれば、残りのスペースの3分の1が最初のスペースに、3分の2が2番目に割り当てられます2番目のものがより重要です。
計算:
最初のラベル= 0 /(0 + 1 + 2)
2番目のテキストボックス= 1 /(0 + 1 + 2)
3番目のテキストボックス= 2 /(0 + 1 + 2)
他の答えに加えて、これを機能させるための最も重要なことは、レイアウトの幅(または高さ)を0pxに設定することです。
Android:layout_width="0px"
そうでなければゴミが見えるでしょう
LinearLayout
にまたがる複数のビューがある場合、layout_weight
はそれぞれに比例したサイズを与えます。大きなlayout_weight
値を持つビューはより「重さが増す」ので、より大きなスペースが得られます。
これは物事をより明確にするためのイメージです。
レイアウトの重みという用語は、数学における 加重平均 の概念に関連しています。それは宿題が30%の価値がある、出席が10%の価値がある、中期が20%の価値がある、そして最終的に40%の価値がある大学の授業のようです。これらの部分に対するあなたの得点は、一緒に重み付けされたとき、あなたにあなたの総成績を与えます。
レイアウトの太さも同じです。水平方向のViews
のLinearLayout
はそれぞれ、全幅の一定の割合を占めることができます。 (または垂直方向のLinearLayout
の高さのパーセンテージ)
あなたが使うLinearLayout
は次のようになります。
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal">
<!-- list of subviews -->
</LinearLayout>
LinearLayout
にはlayout_width="match_parent"
を使用する必要があります。 wrap_content
を使用した場合、それは機能しません。 layout_weight
はRelativeLayoutsのビューでは機能しないことにも注意してください( SO この問題に関する回答については here および here を参照)。
水平方向のLinearLayout
の各ビューは、次のようになります。
<Button
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1" />
layout_width="0dp"
をlayout_weight="1"
と一緒に使用する必要があることに注意してください。これを忘れると、多くの新規ユーザーの問題を引き起こします。 (幅を0に設定しないことで得られるさまざまな結果については この記事 を参照してください。)ビューが vertical LinearLayout
にある場合は、もちろんlayout_height="0dp"
を使用します。
上記のButton
の例では、重みを1に設定していますが、任意の数を使用できます。重要なのは合計だけです。あなたが私が投稿した最初の画像の3列のボタンで見ることができる、数はすべて異なっています、しかし比率が同じであるので、加重幅は各列で変わりません。複雑なレイアウトで各部分の重みが明確になるように、1の合計を持つ10進数を使用することを好む人もいます。
最後のメモです。 layout_weight
を使用するネストされたレイアウトがたくさんある場合は、パフォーマンスに悪影響を与える可能性があります。
これが一番上の画像のxmlレイアウトです。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Android:layout_weight="
Android:textSize="24sp" />
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal">
<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="2"
Android:text="2" />
<Button
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="1"
Android:text="1" />
</LinearLayout>
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Android:layout_weight="
Android:textSize="24sp" />
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal">
<Button
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="10"
Android:text="10" />
<Button
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="20"
Android:text="20" />
<Button
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight="10"
Android:text="10" />
</LinearLayout>
<TextView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Android:layout_weight="
Android:textSize="24sp" />
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="horizontal">
<Button
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight=".25"
Android:text=".25" />
<Button
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight=".50"
Android:text=".50" />
<Button
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_weight=".25"
Android:text=".25" />
</LinearLayout>
</LinearLayout>
layout_weight
はAndroidにView
をLinearLayout
で配布する方法を指示します。次に、Androidは最初にウェイトが指定されているすべてのView
に必要な合計比率を計算し、指定した画面のどの部分に応じて各View
を配置します。次の例では、AndroidはTextView
のlayout_weight
の0
(これがデフォルト)とEditText
のlayout_weight
の2
をそれぞれ持ち、Button
の重みは1
です。そのため、AndroidはtvUsername
とtvPassword
を表示するのに十分なスペースを割り当ててから、残りの画面幅を5つの部分に分割し、そのうちの2つをetUsername
に、残りの2つをetPassword
に、最後の部分をbLogin
に割り当てます。
<LinearLayout Android:orientation="horizontal" ...>
<TextView Android:id="@+id/tvUsername"
Android:text="Username"
Android:layout_width="wrap_content" ... />
<EditText Android:id="@+id/etUsername"
Android:layout_width="0dp"
Android:layout_weight="2" ... />
<TextView Android:id="@+id/tvPassword"
Android:text="Password"
Android:layout_width="wrap_content" />
<EditText Android:id="@+id/etPassword"
Android:layout_width="0dp"
Android:layout_weight="2" ... />
<Button Android:id="@+id/bLogin"
Android:layout_width="0dp"
Android:layout_weight="1"
Android:text="Login"... />
</LinearLayout>
それはように見えます:
そして
そのように考えて、もっと簡単になるでしょう
あなたが3つのボタンを持っていて、それに応じてそれらの重みが1,3,1であるならば、それはHTMLの表のように動作します
その行に5つの部分を提供します。ボタン1に1つの部分、ボタン2に3つの部分、ボタン1に1つの部分
、
私にとって最も良い説明の1つは これ(Androidのチュートリアルから、ステップ7を探す) :
layout_weightは、レイアウト内のビューに「重要度」を割り当てるためにLinearLayoutsで使用されます。すべてのビューは、デフォルトのlayout_weightが0で、画面に表示するのに必要なだけのスペースを占めます。 0より大きい値を割り当てると、各Viewのlayout_weightの値と、このおよび他のView要素に対して現在のレイアウトで指定されている全体のlayout_weightに対する比率に従って、親Viewの残りの使用可能なスペースが分割されます。
例を挙げましょう。水平な行にテキストラベルと2つのテキスト編集要素があるとしましょう。ラベルにはlayout_weightが指定されていないため、レンダリングに必要な最小スペースが占有されます。 2つのテキスト編集要素のそれぞれのlayout_weightが1に設定されている場合、親レイアウトの残りの幅はそれらの間で均等に分割されます(これらが等しく重要であると主張しているため)。最初のレイアウトのlayout_weightが1で、2番目のレイアウトのweightが2である場合、残りのスペースの3分の1が最初のスペースに割り当てられ、3分の2が2番目のスペースに割り当てられます。
http://developer.Android.com/guide/topics/ui/layout-objects.html#linearlayout
layout_weightは、コントロールが他のコントロールに対してそれぞれどのくらいのスペースを確保しなければならないかを定義します。
LinearLayoutのweightSumと各Viewのlayout_weightを見てください。 Android:weightSum = "4" Android:layout_weight = "2" Android:layout_weight = "2"それらのlayout_heightは両方とも0pxですが、それが妥当であるかどうかはわかりません。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:weightSum="4">
<fragment Android:name="com.example.SettingFragment"
Android:id="@+id/settingFragment"
Android:layout_width="match_parent"
Android:layout_height="0px"
Android:layout_weight="2"
/>
<Button
Android:id="@+id/dummy_button"
Android:layout_width="match_parent"
Android:layout_height="0px"
Android:layout_weight="2"
Android:text="DUMMY"
/>
</LinearLayout>
追加の場合 :
vertical
のオリエンテーションの場合、height
を0dpに設定することを忘れないでください
Android:layout_height="0dp"
horizontal
のオリエンテーションの場合、width
を0dpに設定することを忘れないでください
Android:layout_width="0dp"
からの両方の答えを組み合わせる
Flo&rptwsthi and roetzi、
あなたのlayout_width=0dp/px
を変更することを忘れないでください、さもなければ、layout_weight
の振る舞いは、最大の数が最小のスペースを占め、最小の数が最大のスペースを占めて逆に作用します。
その上、いくつかの重みの組み合わせはいくつかのレイアウトが表示されない原因になります(それはスペースを過剰に占めていたので)。
これに注意してください。
Android:autoSizeTextType="uniform"
を追加すると自動的にテキストのサイズが変更されます