我正在尝试使用根布局作为constraintLayout的appCompatDialogFragment。
根布局的布局宽度设置为包装内容。
但当我执行代码时,对话框是收缩的,即使内容改变,它的宽度也是固定的。
下面是生成的布局代码

<?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);

android - 具有ConstraintLayout对话框宽度的AppCompatDialogFragment-LMLPHP
android - 具有ConstraintLayout对话框宽度的AppCompatDialogFragment-LMLPHP
我们可以看到,对于一个长文本,对话框达到某种“最大宽度”(即使没有属性)。
我怎么能有一个对话框,它的内容包装宽度没有这个“限制”?

最佳答案

有一对名为Windowandroid:windowMinWidthMajorandroid:windowMinWidthMinor样式属性。
窗口允许的最小宽度,沿屏幕的长轴[短轴]
(引自documentation
如果您通过定义一些样式为自己的Theme使用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>

在应用程序中,如果同时使用
android:layout_width="0dp"

用你的Theme
如果你继续使用
android:layout_width="wrap_content"

您观察到的“最大宽度”将限制您的Dialog宽度。
顺便说一句,如果你给dialog_fragment_widthTextView的背景上色,你会发现只有当使用Dialog宽度值时,所有的边距才是正确的。
因此,您最好的选择似乎是为TextView设置ConstraintLayout,并根据当前屏幕(对于nougat+:app窗口)宽度为0dp提供不同的值。为此,您需要不同的目录,如android:layout_width="0dp"
请注意:我用模拟器测试了运行棉花糖的平板电脑和运行棒棒糖的手机。虽然成功了,但如果我也能解释原因的话,我会更高兴。所以我认为这更像是半个答案,但我想分享我的观察。

10-06 13:14
查看更多