我有一个简单的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_content
和android: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