我将手机更新为Android 6.0,我遇到了以下两个问题:
1)显示标题,但消息不是警告对话框(已解决):
new AlertDialog.Builder(context).setTitle("Title").setMessage("Message");
2)自定义对话框片段的标题也未显示(未解决):
getDialog().setTitle("Title");
在棒棒糖或旧版本中没有这样的问题,只有在将手机更新为棉花糖后才会出现问题。
如何解决问题?
答案 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
时需要
添加样式
<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;
}
.
.
.
就是这样!