为什么我的EditText风格与我的AlertDialog相匹配?

时间:2015-03-17 04:52:21

标签: android alertdialog material-design

我正在尝试使用单个文本字段提示创建AlertDialog。这是我用来创建它的代码:

final EditText url = new EditText(this);
new AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_DARK)
  .setTitle(R.string.mirror_title)
  .setView(url)
  .setPositiveButton(...)
  .setNegativeButton(...)
  .show();

当我针对API级别22运行时,按钮使用Material按预期样式,但EditText不会:

Dialog with old-style text input

在这里获取新样式EditText需要做什么?

1 个答案:

答案 0 :(得分:4)

您指定@android:style/Theme.DeviceDefault作为提醒对话框主题,但您的EditText正在使用Context所代表的this上设置的任何主题。

为确保提醒对话框的装饰和内容之间的一致性,您应始终使用提醒对话框的主题背景创建内容。

AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this, ...)
    .setTitle(R.string.mirror_title)
    .setPositiveButton(...)
    .setNegativeButton(...);

Context dialogContext = dialogBuilder.getContext();
EditText url = new EditText(dialogContext);

dialogBuilder.setView(url).show();

作为旁注,您可能需要在AndroidManifest.xml中指定一个活动主题,并检查您的targetSdkVersion是否已正确指定。除非您明确定位姜饼主题(例如ThemeTheme.Light),否则您不应该看到姜饼风格的小部件。