3

ConstraintLayout としてルート レイアウトを持つ AppCompatDialogFragment を作成しようとしています。

ルート レイアウトでは、layout_width が wrap_content に設定されています。しかし、コードを実行すると、内容が変更されてもダイアログは縮小され、幅が固定されます。

生成されたレイアウトコードは次のとおりです

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
                                             xmlns:app="http://schemas.android.com/apk/res-auto"
                                             xmlns:tools="http://schemas.android.com/tools"
                                             android:layout_width="wrap_content"
                                             android:layout_height="wrap_content"
                                             android:orientation="vertical"
  >

  <TextView
    android:id="@+id/textView5"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginBottom="16dp"
    android:layout_marginEnd="16dp"
    android:layout_marginStart="16dp"
    android:layout_marginTop="16dp"
    android:text="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras tempus tristique ornare. Aenean ut magna in diam aliquet accumsan. "
    android:textSize="36sp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"/>
</android.support.constraint.ConstraintLayout>

レイアウトを膨らませる方法は次のとおりです。

View view = inflater.inflate(R.layout.weather_dialog, container, false);

長いテキスト

短いテキスト

長いテキストを使用すると、ダイアログが何らかの「最大幅」にヒットすることがわかります (属性がなくても)。

この「制限」なしでコンテンツを幅で折り返すダイアログを作成するにはどうすればよいですか?

4

1 に答える 1

3

Windowとという名前のスタイル属性のペアがありandroid:windowMinWidthMajorますandroid:windowMinWidthMinor

画面の長[短]軸に沿ったウィンドウの最小幅

(ドキュメントから引用)

何らかのスタイルを定義してThemeforを使用する場合Dialog

<style name="FragmentDialogStyle" parent="Theme.AppCompat.Dialog">
    <item name="windowMinWidthMajor">@dimen/dialog_fragment_width</item>
    <item name="windowMinWidthMinor">@dimen/dialog_fragment_width</item>
    <item name="android:windowMinWidthMajor">@dimen/dialog_fragment_width</item>
    <item name="android:windowMinWidthMinor">@dimen/dialog_fragment_width</item>
</style>

と設定

<item name="android:dialogTheme">@style/FragmentDialogStyle</item>
<item name="dialogTheme">@style/FragmentDialogStyle</item>

アプリケーションThemeでは、幅使用 Dialogすると正確になりますdialog_fragment_width

android:layout_width="0dp"

あなたのTextView

一方、使い続けると

android:layout_width="wrap_content"

あなたが観察した「最大幅」はあなたのDialog幅を制限します。

ところで、TextViewとの背景に色ConstraintLayoutを付けると、幅の値を使用した場合にのみ、0dpすべての余白が正しいことがわかります。

したがって、現在の画面 (Nougat+: アプリ ウィンドウの場合) の幅に応じて、に設定android:layout_width="0dp"し、TextViewに異なる値を指定するのが最善の選択肢のようです。dialog_fragment_widthこのためには、 のような別のディレクトリが必要になりますres/values-w600dp

注: Marshmallow を実行しているタブレットと Lollipop を実行している電話のエミュレーターでテストしました。うまくいきましたが、その理由も説明できれば幸いです。ですから、これは答えの半分に近いと思いますが、私の所見を共有したかったのです。

于 2016-10-20T17:08:22.050 に答える