私のユーザー インターフェイスには、RelativeLayout を持つフラグメントがあります。この RelativeLayout の下部には、2 つのボタンがあります。1 つは左側に、もう 1 つは右側に配置し、その間に空白を配置します。左のものは静的なテキストです (ただし、アプリは翻訳されるため、幅がどのくらいになるかはわかりません)。右側のテキストは任意に変更できます。
私はすでに RelativeLayout を持っているので、次のように RelativeLayout 内に配置しようと始めました。
<Button
android:id="@+id/button_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:text="@string/left" />
<Button
android:id="@+id/button_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:text="@string/right" />
しかし、これには、右側のボタンのテキストが長すぎると、左側のボタンに重なってしまうという問題があります。
次に、 を追加して右側のボタンの左端を制限しようとしましたandroid:layout_toRightOf="@+id/button_left"
が、これを使用すると、右側のボタンが常に使用可能な幅を埋めてしまいます。右側のボタンのテキストが短い場合は、縮小して左側のボタンとの間に隙間ができるようにします。
次に LinearLayout を使用しようとしたので、次のようにボタンに layout_gravity を設定できました。
<LinearLayout
android:id="@+id/buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" >
<Button
android:id="@+id/button_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/left" />
<Button
android:id="@+id/button_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:drawableLeft="@drawable/pass"
android:text="@string/right" />
</LinearLayout>
まだ喜びはありません。私はこれがうまくいくと思っていましたが、画面の右端にくっつくのではなく、右側のボタンが左側のボタンのすぐ右側にとどまります。レイアウト エディターで、LinearLayout が画面の幅を正しく埋めていることがわかりますが、ボタンは頑固にその友達の横にとどまります。
android:layout_weight="1"
右側のボタンにも追加しようとしましたが、繰り返しますが、使用可能なスペースを埋めるために常に拡張されました。
次に、次のように、ボタンの間に空のビューを追加して、右側のボタンを展開して強制的に右側に配置しようとしました。
<LinearLayout
android:id="@+id/buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" >
<Button
android:id="@+id/button_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/left" />
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1" />
<Button
android:id="@+id/button_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:text="@string/right" />
</LinearLayout>
これは、元の RelativeLayout と同じように、テキストが短い場合は正常に機能しますが、右側のボタンのテキストが長い場合、その幅は使用可能なスペースではなく画面の幅によって制限されるため、はみ出します画面の右端。繰り返しますが、レイアウト エディターで LinearLayout の幅が正しいことを確認できますが、ボタンは親の境界を拡張しています。これは、ボタンに があっても発生しますandroid:layout_width="match_parent"
。奇妙なことに、右側のボタンの layout_gravity を大きくすると、使用可能なスペースに収まるまで小さくなりますが、もちろん、テキストが小さい場合はスペースを埋めることにもなります。
これを正しくするのがこんなに難しいなんて信じられない。私は SO で同様の質問を 6 つ見てきましたが、すべて簡単な回避策があります。ボタンのテキストが固定されている場合は、余白を手動で固定幅に設定できます。拡張ウィジェットが Button ではなく TextView である場合は、拡張してウィジェットandroid:gravity
内のテキストを移動するために使用できますが、背景と境界線が画面に表示されるため、ボタンでそれを行うことはできません。