回答:
ではlayout_weight
、複数のビュー間のサイズ比を指定できます。たとえば、地図に追加情報を表示するa MapView
とaがtable
あります。マップは画面の3/4を使用し、テーブルは画面の1/4を使用する必要があります。次にlayout_weight
、のmap
を3に設定しlayout_weight
、table
を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
指定されていないため、レンダリングに必要な最小スペースを占めます。場合はlayout_weight
2つのテキスト編集の各要素のが1に設定されている(私たちは、彼らが等しく重要であると主張するので)、親のレイアウトの残りの幅は、それらの間で均等に分割されます。
計算:
1番目のラベル= 0 /(0 + 1 + 1)
2番目のテキストボックス= 1 /(0 + 1 + 1)
3番目のテキストボックス= 1 /(0 + 1 + 1)
代わりに、最初の1つのテキストボックスのa layout_weight
が1で、2番目のテキストボックスのa layout_weight
が2の場合、残りのスペースの3分の1が最初のスペースに、3分の2が2番目のスペースに割り当てられます(2番目のテキストボックスは1つはより重要です)。
計算:
1番目のラベル= 0 /(0 + 1 + 2)
2番目のテキストボックス= 1 /(0 + 1 + 2)
3番目のテキストボックス= 2 /(0 + 1 + 2)
android:layout_width="0px"
重要です。また、重みは整数である必要はありません。
weightSum
どこで絵を描くのでしょうか?何layout_weight
か関係がありますか?
他の答えに加えて、これを機能させるための最も重要なことは、レイアウトの幅(または高さ)を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>
あなたが使用する必要がありますlayout_width="match_parent"
のためにLinearLayout
。を使用するwrap_content
と、機能しません。また、layout_weight
はRelativeLayoutsのビューでは機能しないことに注意してください(この問題を処理するSOの回答については、こことここを参照してください)。
水平方向の各ビューはLinearLayout
次のようになります。
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1" />
とlayout_width="0dp"
一緒に使用する必要があることに注意してくださいlayout_weight="1"
。これを忘れると、多くの新しいユーザーの問題が発生します。(幅を0に設定しないことで得られるさまざまな結果については、この記事を参照してください。)ビューが垂直方向 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
sでLinearLayout
。次に、Androidは最初に、View
指定された重みを持つすべてのに必要な合計比率を計算し、必要なView
画面のどの部分に応じてそれぞれを配置します。次の例では、Androidはことを認識TextView
sが有するlayout_weight
のを0
(デフォルト)とEditText
Sが持っているlayout_weight
の2
が、それぞれButton
の重量を有します1
。そうアンドロイドディスプレイにちょうど十分'スペース割り当てtvUsername
とtvPassword
、その後に割り当てられているそのうちの2つが5等分、に画面幅の残りの部分を分割し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>
それは次のようになります
し、
私にとって最も良い説明の1つはこれです(Androidチュートリアルから、ステップ7を探してください):
layout_weightはLinearLayoutsで使用され、レイアウト内のビューに「重要度」を割り当てます。すべてのビューのデフォルトのlayout_weightは0です。つまり、ビューは、表示に必要なだけのスペースを画面上に占めます。ゼロより大きい値を割り当てると、各ビューのlayout_weightの値と、このビューおよび他のビュー要素の現在のレイアウトで指定された全体のlayout_weightに対する比率に従って、親ビューで利用可能な残りのスペースが分割されます。
例を挙げましょう:横一列にテキストラベルと2つのテキスト編集要素があるとします。ラベルにはlayout_weightが指定されていないため、レンダリングに必要な最小スペースを占めます。2つのテキスト編集要素のそれぞれのlayout_weightが1に設定されている場合、親レイアウトの残りの幅はそれらの間で均等に分割されます(これらは等しく重要であると主張しているため)。最初のレイアウトのlayout_weightが1で、2番目のレイアウトのlayout_weightが2の場合、残りのスペースの3分の1が最初のスペースに割り当てられ、3分の2が2番目のスペースに割り当てられます(2番目のスペースがより重要であると主張しているため)。
http://developer.android.com/guide/topics/ui/layout-objects.html#linearlayout
layout_weightは、コントロールが他のコントロールに対してそれぞれ取得する必要があるスペースの量を定義します。
LinearLayoutのweightSumと各ビューの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>
からの両方の答えを組み合わせる
Flo&rptwsthiおよびroetzi、
を変更することを忘れないでください。変更しないと、最大数が最小スペースを占有し、最小数が最大スペースを占有するとlayout_width=0dp/px
、layout_weight
動作が逆になります。
また、ウェイトの組み合わせによっては、レイアウトを表示できない場合があります(スペースを占有しているため)。
これに注意してください。
追加するandroid:autoSizeTextType="uniform"
と、テキストが自動的にサイズ変更されます