在此之前,我使用DialogBuilder
来创建AlertDialog
,就像这样
AlertDialog.Builder builder = new AlertDialog.Builder(context);
...
...
AlertDialog dialog = builder.create();
如何从对话框构建器构建新的AppCompatDialog
,还是有另一种新的等效方法呢?
答案 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.AppCompatDialog
是android.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+获得市场份额,您将需要切换回原生对话框。