SetView AlertDialogBu​​ilder奇怪的行为

时间:2014-03-03 21:38:09

标签: android android-dialog

我想更改标准Holo.Light对话框的背景。当我将自定义视图设置为对话框警报时,它的高度会增加。

这是我正常对话的代码

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(mLogin);
alertDialogBuilder.setTitle("No Connection");
alertDialogBuilder.setMessage("You are not connected to a Wifi or data connection. Please connect and retry");
alertDialogBuilder.setNeutralButton(getString(R.string.miscClose), new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        dialog.dismiss();
    }

});
alertDialogBuilder.show();

此代码显示此对话框

enter image description here

然后我尝试添加我的视图:

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(mLogin);
alertDialogBuilder.setView(View.inflate(mLogin, R.layout.test_alert, null));
alertDialogBuilder.setTitle("No Connection");
alertDialogBuilder.setMessage("You are not connected to a Wifi or data connection. Please connect and retry");

alertDialogBuilder.setNeutralButton(getString(R.string.miscClose), new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        dialog.dismiss();
    }
});
alertDialogBuilder.show();

此代码显示此对话框:

enter image description here

我不明白为什么只是添加那个空间。我添加了一个简单的布局,背景颜色为蓝色。如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/YakBlue">


</LinearLayout>

有关如何将基本警报对话框背景颜色更改为蓝色的任何帮助都会很棒。

P.S我尝试了主题,但没有成功。我的min apk是9。

由于

1 个答案:

答案 0 :(得分:1)

这是因为警告对话框的布局包含一个将视图放在其中的容器,所以你要做的只是添加一个占用空间的空视图。尝试将其颜色更改为红色,您会注意到它位于文本下方和按钮上方。

为了改变对话框的风格,你应该改变它的风格。 here's一个很好的库,演示如何使用基本的全息样式。您也可以使用HoloEverywhere库中显示的那个。

当然,如果您不想支持旧设备(但根据minSdk,您可以),您可以直接更改样式并为应用程序本身设置主题,这将更改对话框样式整个应用程序。

不仅如此,您甚至不必使用AlertDialog。你可以改为创建自己的对话框。