与底部相关的 AlertDialog 属性无法与 RelativeLayout 或 ConstraintLayout 一起正常工作
Posted
技术标签:
【中文标题】与底部相关的 AlertDialog 属性无法与 RelativeLayout 或 ConstraintLayout 一起正常工作【英文标题】:AlertDialog properties related to bottom is not working properly with RelativeLayout nor ConstraintLayout 【发布时间】:2022-01-14 21:13:21 【问题描述】:<?xml version="1.0" encoding="utf-8"?>
<layout 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">
<data></data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_
android:layout_
android:background="@color/white">
<View
android:layout_
android:layout_
android:background="@color/my_color"
app:layout_constraintBottom_toBottomOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<layout>
左图来自 XML,但启动应用程序后,对话框显示不正确。我猜这就像 ConstraintLayout 的高度是 wrap_parent
并且无法检测到底部。
我该如何解决这个问题?
【问题讨论】:
试试This thread。如果您使用自定义视图已经更好,请转到DialogFragment
或 Dialog
。 AlertDialog
是一个专用对话框,仅适用于警报。你可以用AlertDialog
做同样的事情,因为它确实是一个对话框。
您是使用requireContext()
作为AlertDialog.Builder
上下文还是仅使用null
?
【参考方案1】:
在YourDialog类上,你可以设置对话框的宽度和高度,像这样。
override fun onStart()
super.onStart()
dialog?.let dia ->
dia.window?.let win ->
val attributes = win.attributes
attributes.width = ViewGroup.LayoutParams.MATCH_PARENT
attributes.height = ViewGroup.LayoutParams.MATCH_PARENT
win.attributes = attributes
【讨论】:
这行不通。【参考方案2】:您的视图不是对话框。使用DialogFragment
并设置此
val params = window.attributes
params?.width = ViewGroup.LayoutParams.MATCH_PARENT
params?.height = ViewGroup.LayoutParams.WRAP_CONTENT
params?.gravity = Gravity.BOTTOM
window.attributes = params
【讨论】:
以上是关于与底部相关的 AlertDialog 属性无法与 RelativeLayout 或 ConstraintLayout 一起正常工作的主要内容,如果未能解决你的问题,请参考以下文章
带有 ListView 和底部 TextField 的 Flutter AlertDialog
带有Edittext setView的Android AlertDialog Builder在底部显示?