对AlertDialog的高度行为感到困惑

时间:2018-05-16 20:52:52

标签: java android

我有一个简单的AlertDialog显示如下:

new AlertDialog.Builder(this)
    .setTitle("Test")
    .setView(R.layout.dialog_test)
    .setPositiveButton("button1", null)
    .show();

这就是dialog_test布局的样子:

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#FF0000"
    android:text="Test"/>

TextView显示在对话框内容空间的顶部,下方有额外的空间。所以似乎AlertDialog定义了某种最小高度。我想摆脱AlertDialog的最小高度并包装TextView的高度,或者我想在AlertDialog的内容空间中至少垂直居中TextView。

我尝试设置对话框的布局以在显示之前/之后包裹高度,但它没有做任何事情:dialog.window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT)

我还尝试将TextView的android:layout_height设置为wrap_contentandroid:layout_gravity设置为center_vertical,但TextView仍然位于AlertDialog内容空间的顶部。我尝试将TextView的android:layout_height设置为match_parent,将android:gravity设置为center_vertical,但TextView的高度未填充AlertDialog的内容空间,并且似乎保持包装并保持在AlertDialog内容的顶部。

我正在使用android.support.v7.app.AlertDialog,但也尝试了android.app.AlertDialog,它也有同样的问题。

当我的内容高度低于AlertDialog的最小高度时,有没有办法让我删除AlertDialog的最小高度或者至少将内容垂直居中?

谢谢!

UPDATE :在查看AlertDialog的代码后,我发现添加自定义视图的布局(customPanel)确实具有最小高度。

你可以删除最小高度:

AlertDialog dialog = new AlertDialog.Builder(this)
    .setView(R.layout.dialog_test)
    .show();
dialog.findViewById(R.id.customPanel).setMinimumHeight(0);
// Use R.id.contentPanel if you're using setMessage() instead of setView()

或者,如果你想保持最小高度但想要垂直居中,我就这样完成了:

AlertDialog dialog = new AlertDialog.Builder(this)
    .setView(R.layout.dialog_test)
    .show();
((FrameLayaout.LayoutParams) dialog.findViewById(R.id.custom).getLayoutParams()).gravity = Gravity.CENTER_VERTICAL

0 个答案:

没有答案