Android 6.0 对话框文本不出现

Posted

技术标签:

【中文标题】Android 6.0 对话框文本不出现【英文标题】:Android 6.0 Dialog text doesn't appear 【发布时间】:2016-01-18 15:05:23 【问题描述】:

我将手机更新到 android 6.0,但我遇到了以下 2 个对话框问题:

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

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

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

        getDialog().setTitle("Title");

在棒棒糖和旧版本中都没有这个问题,只是在我的手机更新到棉花糖后才出现问题。

如何解决问题?

【问题讨论】:

发布你所有的代码,而你没有打电话给show 我已经编辑了代码 dialog.show() 在哪里?? 可以给出一些截图,因为从代码问题我们看到没有dialog.show。并提供更多代码。 我也加了截图 【参考方案1】:

为 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);
    

对于轻主题

    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);
    

【讨论】:

谢谢亚历山大。这适用于 AlertDialog.Builder 案例。有什么方法可以申请Custom Dialog(扩展Dialog类而不是Fragments)案例。 @jettimadhuChowdary,当您创建自定义对话框时使用dialog = new CustomDialog(this,android.R.style.Theme_Material_Dialog_alert); 如果您有很多对话框,这不是一个好方法。 @Stephen 答案是最好的。【参考方案2】:

我遇到了一些回答说您应该在应用主题中使用以下内容:

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

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

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

【讨论】:

这个答案应该推到顶部。【参考方案3】:

只需将其放入基本主题样式标签内的样式文件中,您就可以开始了

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

【讨论】:

我认为这个解决方案比在我们想要创建AlertDialog 的任何地方检查和更改主题更好。【参考方案4】:

回答2),我们需要在onCreateDialog()之前调用setStyle(),因为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;

【讨论】:

【参考方案5】:

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

你的对话框对象应该是这样的,你指向这个对话框的样式会写在下面

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>

最后输出应该是这样的

注意:“android:textColorPrimary”用于对话框 setMessage,“android:textColor”用于对话框 setTitle;我没有在我的对话框对象中使用 setPositive 和 setNegative 按钮和侦听器,但是如果您愿意,可以在图片中看到它们,您可以制作自己的对话框对象。

【讨论】:

【参考方案6】:
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();

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

【讨论】:

它对我有用....好的,我会再检查一次,然后再回复你..... 你的应用的目标api是23吗? 它在我的应用程序中运行良好,我已经检查过它并且运行良好.......在 android api 23(NEXUS 5 新更新到 android Marshmello) 标题在 6.0 中没有设置...有什么线索吗?【参考方案7】:

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

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

【讨论】:

【参考方案8】:

也许您的主要文本颜色与对话框背景颜色相同,在这种情况下,在您的 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");

【讨论】:

【参考方案9】:

使用DialogFragment时需要

    添加样式

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

    在您的DialogFragment 中添加getTheme

    public class CustomDialogFragment extends DialogFragment
        public int getTheme()  
            return R.style.CustomDialogFragment; 
        
        .
        .
        .
    

就是这样!

【讨论】:

【参考方案10】:
@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();
    

一旦检查这个希望这会工作.......

【讨论】:

【参考方案11】:

在我的例子中,所有对话框的颜色都与字体(标题和消息)相同。我为修复这种状态所做的是更改了我的主题中的颜色属性。我将 xml 主题文件复制到“res/values-v22”中,并为棉花糖设置了不同的颜色。

<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>

【讨论】:

以上是关于Android 6.0 对话框文本不出现的主要内容,如果未能解决你的问题,请参考以下文章

如何调试/重置 Android 6.0 权限?

Android运行时权限对话框未显示

如何显示 Android-Rate 对话框?

.html 工作,但 ajax 请求后不出现文本

为 Android M 权限对话框提供自定义文本

如何在 Android 的 web 视图中禁用文本选择?