如何从 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.AppCompatDialog
是 android.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+ 获得市场份额,您将希望切换回本机对话框。
在此之前我使用 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.AppCompatDialog
是 android.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+ 获得市场份额,您将希望切换回本机对话框。