Android 6.0对话框文本不会出现

时间:2015-10-20 05:12:23

标签: android android-alertdialog android-dialogfragment android-dialog android-6.0-marshmallow

我将手机更新为Android 6.0,我遇到了以下两个问题:

1)显示标题,但消息不是警告对话框(已解决):

        new AlertDialog.Builder(context).setTitle("Title").setMessage("Message");

2)自定义对话框片段的标题也未显示(未解决):

        getDialog().setTitle("Title");

在棒棒糖或旧版本中没有这样的问题,只有在将手机更新为棉花糖后才会出现问题。

如何解决问题?

11 个答案:

答案 0 :(得分:37)

为Lollipop和更新的Android版本使用带有主题的构造函数:

黑暗主题

    AlertDialog.Builder builder;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        builder = new AlertDialog.Builder(context, android.R.style.Theme_Material_Dialog_Alert);
    } else {
        builder = new AlertDialog.Builder(context);
    }

Light theme

    AlertDialog.Builder builder;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        builder = new AlertDialog.Builder(context, android.R.style.Theme_Material_Light_Dialog_Alert);
    } else {
        builder = new AlertDialog.Builder(context);
    }

答案 1 :(得分:29)

我发现了一些答案,说你应该在你的应用主题中使用以下内容:

$fields->removeByName("ViewerGroups");

虽然这是正确的,但它并不适用于所有地方。最后,我意识到在某些地方我使用常规的AlertDialog构建器,而在其他地方我使用的是支持构建器。如果您使用支持AlertDialog,请确保在主题中包含以下内容:

<item name="android:alertDialogTheme">@style/Theme.AppCompat.Light.Dialog.Alert</item>

答案 2 :(得分:18)

将它放在你的基本主题样式标签内的样式文件中,你就可以了

<item name="android:alertDialogTheme">@style/Theme.AppCompat.Light.Dialog.Alert</item>

答案 3 :(得分:9)

回答2),我们需要在setStyle()之前致电onCreateDialog()因为theme中使用了onCreateDialog()

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        setStyle(STYLE_NORMAL, android.R.style.Theme_Material_Light_Dialog_Alert);
    }
    Dialog dialog = super.onCreateDialog(savedInstanceState);
    dialog.setTitle(R.string.dialog_title);
    return dialog;
}

答案 4 :(得分:7)

我尝试通过制作自己的风格来解决这个问题。

你的对话框对象应该是这样的,你的风格指向这个对话框将写在下面

new AlertDialog.Builder(new ContextThemeWrapper(Context, R.style.Dialog))
            .setTitle("Title")
            .setMessage("Sample Message ...").show();

R.style.Dialog ::

<style name="Dialog">
    <item name="android:textColorPrimary">@color/primary_text</item>
    <item name="android:textColor">@color/primary_color</item>
</style>

颜色::

<color name="primary_text">#212121</color>
<color name="primary_color">#2196f3</color>

最后输出应该是这样的

注意:&#34; android:textColorPrimary&#34;转到对话框setMessage和&#34; android:textColor&#34;转到对话框setTitle;我不在我的对话框对象中使用setPositive和setNegative按钮和监听器,但是如果你想要你可以创建自己的对话框对象,你可以在图片中看到它们。

答案 5 :(得分:1)

new AlertDialog.Builder(context)
    .setTitle("Delete entry")
    .setMessage("Are you sure you want to delete this entry?")
    .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) { 
            // continue with delete
        }
     })
    .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) { 
            // do nothing
        }
     })
    .setIcon(android.R.drawable.ic_dialog_alert)
     .show();

希望这会对你有帮助.............

答案 6 :(得分:1)

我怀疑你最终在白色背景上显示白色文字! (看截图,(i)图标也没有很好地显示,表明它被设计为显示在除白色之外的背景上。

您可以使用构造函数public AlertDialog.Builder (Context context, int themeResId)来确保使用特定主题来设置对话框的样式,Theme_Material_Dialog可能就是您想要的。

答案 7 :(得分:1)

也许你的主文本颜色与对话框背景颜色相同,在这种情况下你在styles.xml中使用(只是一个例子):

<style name="AlertDialog" parent="@android:style/Theme.Material.Light.Dialog.Alert">
    <item name="android:textColor">#000000</item>
</style>

并在对话框创建中:

new AlertDialog.Builder(
        new ContextThemeWrapper(getContext(), R.style.AlertDialog))
).setMessage("test");

答案 8 :(得分:0)

@Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the Builder class for convenient dialog construction
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setMessage(R.string.dialog_fire_missiles)
               .setPositiveButton(R.string.fire, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       // FIRE ZE MISSILES!
                   }
               })
               .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       // User cancelled the dialog
                   }
               });
        // Create the AlertDialog object and return it
        return builder.create();
    }

一旦检查了这个希望,这将有效.......

答案 9 :(得分:0)

在我的情况下,所有对话框都与字体(标题和消息)具有相同的颜色。我修复此状态所做的是更改主题中的颜色属性。我将xml主题文件复制到&#39; res / values-v22&#39;并为棉花糖设置不同的颜色。

<resources>
    <style name="LywCompatTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
        <item name="android:textColorPrimary">@android:color/tertiary_text_dark</item>
    </style>
</resources>

或仅适用于对话

<resources>
    <style name="LywCompatTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
        <item name="android:alertDialogTheme">@style/LywAlertDialogStyle</item>
    </style>
    <style name="LywAlertDialogStyle" parent="Base.Theme.AppCompat.Light.Dialog.Alert">
        <item name="android:textColorPrimary">@color/lyw_secondary_text_color</item>
    </style>
</resources>

答案 10 :(得分:0)

使用DialogFragment时需要

  1. 添加样式

    <style name="CustomDialog" parent="@style/Theme.AppCompat.Light.Dialog">
        <item name="android:windowNoTitle">false</item>
    </style>
    
  2. DialogFragment添加getTheme

    public class CustomDialogFragment extends DialogFragment{
        public int getTheme() { 
            return R.style.CustomDialogFragment; 
        }
        .
        .
        .
    
  3. 就是这样!