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

How to Build AppCompatDialog From AlertDialog.Builder or Equivalent?

在此之前我使用 DialogBuilder 来创建 AlertDialog 这样的

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

如何从对话框生成器构建新的 AppCompatDialog,或者是否有另一种新的等效方法?

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

import android.support.v7.app.AlertDialog;

然后 AppCompatDialog dialog = builder.create() 就可以了。

android.support.v7.app.AppCompatDialogandroid.support.v7.app.AlertDialog 的直接父级 class,哪里可以使用 android.support.v7.app.AlertDialog,哪里就可以使用 android.support.v7.app.AppCompatDialog.

如果您想使用 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();

如果

我刚刚将我所有的 android.app.AlertDialog 移动到 android.support.v7.app.AlertDialog

在使用 4.X 模拟器进行一些测试后,我发现对于一个简单的对话框,只需更改导入就足够了。但对于多选对话框,您还需要执行 AppCompatDialog alert = builder.create(); 以获得 Material 设计风格对话框(在 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 设计外观。

现在是有趣的部分!

对于多选对话框,在 5.X 设备上,本机版本 (android.app.AlertDialog) 在 [=36] 处显示复选框=]左,正确跟随Material Design spec。但是,如果您使用支持对话框,那么复选框将出现在右侧。卧槽!

从长远来看,随着 Android 5+ 获得市场份额,您将希望切换回本机对话框。