与底部相关的 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。如果您使用自定义视图已经更好,请转到 DialogFragmentDialogAlertDialog 是一个专用对话框,仅适用于警报。你可以用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在底部显示?

将文本与 div 底部对齐

使用自定义布局将宽度和高度设置为 AlertDialog 无法正确应用

“无法读取与解决方案相关的某些属性”VS 2012中的警告

AlertDialog的用法