2016-10-20 41 views
3

私は、ConstraintLayoutとしてルートレイアウトを持つAppCompatDialogFragmentを取得しようとしています。ConstraintLayoutダイアログ幅を持つAppCompatDialogFragment

ルートレイアウトのレイアウト幅は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); 

Long text

Short text

私たちは、長いテキストダイアログでそれを見ることができますある種の「最大幅」に遭遇する彼は属性)。

この「制限」なしにコンテンツの幅をラップするダイアログを表示するにはどうすればよいですか?

+0

1)あなたは 'onCreateView()'でレイアウトを膨らませますか? 2)values/style.xmlを共有してください – 0X0nosugar

+0

こんにちは、レイアウトは 'onCreateView()'で膨らみます。また、空のプロジェクトでコードスニペットをテストしたところ、その振る舞いは同じです...私はそれがスタイルに関係しているとは思わない... – Azartys

+1

これは大丈夫です。ダイアログ(断片)。本当に面白い質問。 – 0X0nosugar

答えて

1

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

主要[マイナー]に沿って窓があることを許可されている最小幅、画面の軸

あなたがしてDialogためThemeを使用する場合は

documentationより引用)

<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> 

を設定し、いくつかのスタイルを定義しますアプリケーション Theme
<item name="android:dialogTheme">@style/FragmentDialogStyle</item> 
<item name="dialogTheme">@style/FragmentDialogStyle</item> 

また、あなたのTextView

android:layout_width="0dp" 

を使用場合、Dialog幅は正確にdialog_fragment_widthになります。あなたは

android:layout_width="wrap_content" 

「最大幅」を使用し続ける場合は、あなたのDialog幅を抑制します観察に対し

TextViewConstraintLayoutの背景色を設定すると、0dpの幅の値を使用している場合にのみ、すべての余白が正しいことがわかります。

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

注:私はエミュレータで、マシュマロを実行しているタブレットとLollipopを実行している携帯電話でテストしました。それがうまくいったのですが、理由を説明できれば幸いです。だから私はこれが半分の答えのようだと思うが、私は私の観察を分かち合いたいと思った。

+0

はい、これは私がやったことです。私はおそらく、制約レイアウトを指して間違っていた、私はRelativeLayoutと同じ動作を持っていた。 – Azartys

関連する問題