親のConstraintLayoutに対して2つのボタンが右に並んだダイアログを作成しています。
ボタンのテキストが非常に長くなるまで、すべてが正常です。いずれかまたは両方のボタンのテキストが長い場合、ボタンは親の境界を超えて伸び、下の画像に示すようにテキストがクリッピングされます。テキストが長い場合を処理したいと思います。
つまり、望ましい動作は
ボタンのテキストが短い場合、レイアウトは意図したとおりに機能します:
ボタンのテキストが長い場合:
レイアウトコード
<?xml version="1.0" encoding="utf-8"?>
<Android.support.constraint.ConstraintLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:paddingBottom="@dimen/dialog_padding"
Android:paddingLeft="@dimen/dialog_padding"
Android:paddingRight="@dimen/dialog_padding"
Android:paddingTop="@dimen/dialog_padding">
<TextView
Android:id="@+id/dialog_title"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="@dimen/dialog_text_margin"
tools:text="Dialog title" />
<TextView
Android:id="@+id/dialog_content"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="@dimen/dialog_text_margin"
app:layout_constraintTop_toBottomOf="@id/dialog_title"
tools:text="Dialog text content" />
<Button
Android:id="@+id/cancel_btn"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
app:layout_constraintEnd_toStartOf="@id/ok_btn"
app:layout_constraintTop_toBottomOf="@id/dialog_content"
tools:text="Dismiss" />
<Button
Android:id="@+id/ok_btn"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/dialog_content"
tools:text="Accept" />
</Android.support.constraint.ConstraintLayout>
私が役に立たなかったもの:
app:layout_constraintStart_toStartOf="parent"
を追加すると、ボタンが正しく配置されなくなり、ソリューションが正しくなくなりますlayout_width="0dp"
を使用し、app:layout_constrainedWidth="true"
を使用しても効果がありません以下は、あなたが達成しようとしていることのスクリーンショットです。
まず、いくつかの短いテキストで:
長いテキストがあります:
私はレイアウトにいくつかの自由を取り、ボタンが制限される幅の33%でガイドラインを導入しました。ボタンを水平方向にどれだけ拡張できるかを指定しなかったので、この仮定をしました。
このレイアウトのXMLは次のとおりです。ボタンの幅を0dp
またはmatch_constraints
に設定して、サイズを調整します。ボタンは、2つのボタンをグループ化するpacked
チェーンにも配置されています。水平バイアスは0.5
に設定されていますが、それを大きくすると、左に忍び寄ってきた場合にグループが右に移動します。
ConstraintLayout
ドキュメント には、これらの機能とそれらの使用方法についての適切な説明があります。
<Android.support.constraint.Guideline
Android:id="@+id/guideline"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="vertical"
app:layout_constraintGuide_percent="0.33" />
<TextView
Android:id="@+id/dialog_title"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="@dimen/dialog_text_margin"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Dialog title" />
<Button
Android:id="@+id/cancel_btn"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
app:layout_constraintEnd_toStartOf="@+id/ok_btn"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toEndOf="@+id/guideline"
app:layout_constraintTop_toBottomOf="@+id/dialog_title"
tools:text="Dismiss" />
<Button
Android:id="@+id/ok_btn"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_marginEnd="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/cancel_btn"
app:layout_constraintTop_toTopOf="@+id/cancel_btn"
tools:text="Accept" />