为什么我的 EditText 样式不匹配我的 AlertDialog?

Why isn't my EditText styled to match my AlertDialog?

我正在尝试创建带有单个文本字段提示的 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 没有:

我需要做什么才能在此处获得新样式 EditText

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

为确保警报对话框的装饰和内容之间的一致性,您应始终使用警报对话框的主题上下文创建内容。

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 中指定一个 activity 主题并检查您的 targetSdkVersion 是否指定正确。除非您明确针对姜饼主题(例如 ThemeTheme.Light),否则您不应看到姜饼样式的小部件。