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 对话框文本不出现的主要内容,如果未能解决你的问题,请参考以下文章