如何从AlertDialog.Builder或等效构建AppCompatDialog?

时间:2015-04-22 01:31:15

标签: android material-design alertdialog android-appcompat appcompatdialog

在此之前,我使用DialogBuilder来创建AlertDialog,就像这样

AlertDialog.Builder builder = new AlertDialog.Builder(context);
...
...
AlertDialog dialog = builder.create();

如何从对话框构建器构建新的AppCompatDialog,还是有另一种新的等效方法呢?

4 个答案:

答案 0 :(得分:19)

刚刚找到解决方案。我应该导入

import android.support.v7.app.AlertDialog;

然后AppCompatDialog dialog = builder.create()将有效。

答案 1 :(得分:16)

如果您想使用AlertDialog,只需导入新的supprt v 22.1并使用这样的代码(注意导入):

import android.support.v7.app.AlertDialog

AlertDialog.Builder builder =
       new AlertDialog.Builder(this, R.style.AppCompatAlertDialogStyle);
            builder.setTitle("Dialog");
            builder.setMessage("Lorem ipsum dolor ....");
            builder.setPositiveButton("OK", null);
            builder.setNegativeButton("Cancel", null);
            builder.show();

如果

答案 2 :(得分:6)

android.support.v7.app.AppCompatDialogandroid.support.v7.app.AlertDialog的直接父类,只要您可以使用android.support.v7.app.AlertDialog,就可以使用android.support.v7.app.AppCompatDialog

答案 3 :(得分:4)

我刚刚将android.app.AlertDialog移至android.support.v7.app.AlertDialog

在使用4.X仿真器进行一些测试后,我发现只需更改导入就可以进行简单的对话。但是对于多选对话框,您还需要AppCompatDialog alert = builder.create();来获取Material Design样式对话框(在4.X上)。

要清楚,如果您有一个像这样的简单对话框:

import android.support.v7.app.AlertDialog;

AlertDialog.Builder builder = new AlertDialog.Builder(ctx);
builder.setIcon(resId)
.setTitle(title)
.setMessage(msg)
.setCancelable(isCalncelable)
.setPositiveButton(btn1, listener1);
AlertDialog alert = builder.create();
alert.show();

更改导入就足够了:)

但是对于多选对话,您需要像这样使用AppCompatDialog

import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatDialog;

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Choose something")
.setPositiveButton(...)
.setMultiChoiceItems(mStringArray, mSelectedArray, SomeFragment.this);
AppCompatDialog alert = builder.create();
alert.show();

然后在4.X设备上获得漂亮的Material Design外观。

现在是有趣的部分!

对于多选对话框,5.X设备上的 ,原生版本(android.app.AlertDialog)会正确显示左侧的复选框Material Design spec之后。但是,如果您使用支持对话框,则复选框将显示在右侧。 WTF!

从长远来看,随着Android 5+获得市场份额,您将需要切换回原生对话框。