我刚刚将所有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。但如果您使用支持对话框,则复选框将出现在右侧。卧槽!
从长远来看,随着 Android 5+ 获得市场份额,您将希望切换回原生对话框。