我注意到有时候DialogFragment
显示得很糟糕,例如,给定以下XML:
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/spacing_large">
<ImageView
android:id="@+id/close"
android:layout_width="@dimen/icon_size_medium"
android:layout_height="@dimen/icon_size_medium"
android:layout_gravity="end"
android:src="@drawable/ic_close"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
style="@style/Text.Subtitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="This is a test with 'match_parent'"
android:textAlignment="center"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/close" />
</androidx.constraintlayout.widget.ConstraintLayout>
它显示如下:
另一方面,下面的XML是 * broken *:
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/spacing_large">
<ImageView
android:id="@+id/close"
android:layout_width="@dimen/icon_size_medium"
android:layout_height="@dimen/icon_size_medium"
android:layout_gravity="end"
android:src="@drawable/ic_close"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
style="@style/Text.Subtitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="This is a test with '0dp'"
android:textAlignment="center"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/close" />
</androidx.constraintlayout.widget.ConstraintLayout>
我只做了以下更改:
android:layout_width="match_parent" --> android:layout_width="0dp"
add --> app:layout_constraintEnd_toEndOf="parent"
我在其他布局(LinearLayout
,FrameLayout
)中也遇到过这种情况。为什么会这样呢?
我看到很多关于设置对话框大小的问题,我相信这是由于这个 * bug *。大多数在onResume
中设置了新的布局参数,但感觉很糟糕,我觉得有一个解释。
这里使用了DialogFragment
实现:
class SomeFragment : DialogFragment() {
private lateinit var binding: FragmentSomeBinding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
binding = FragmentSomeBinding.inflate(inflater, container, false)
return binding.root
}
}
- 编辑:**
这是对LinearLayout
的一次尝试,具有类似的意外行为。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/spacing_large">
<ImageView
android:layout_width="@dimen/icon_size_medium"
android:layout_height="@dimen/icon_size_medium"
android:layout_gravity="end"
android:src="@drawable/ic_close"/>
<TextView
style="@style/Text.Subtitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="This is a test with 'LinearLayout'"
android:textAlignment="center"/>
</LinearLayout>
1条答案
按热度按时间vngu2lb81#
以下XML已损坏
都坏了。
你的
ConstraintLayout
有android:layout_width="match_parent"
,你不能控制父节点。根据截图,父节点的宽度大概是wrap_content
,但是你不应该依赖它,因为它可能会变化。要么给ConstraintLayout
一个特定的宽度,要么使用wrap_content
作为它的宽度。