求助:DatePickerDialog底部按钮标签无法显示
解决DatePickerDialog底部按钮标签不显示的问题
嘿,看你遇到了DatePickerDialog底部按钮没显示标签的问题,结合你提供的代码和环境(Android Studio 3.2 Canary、目标SDK28),这个问题大概率是Android 9(API28)系统下的主题适配bug——按钮文字颜色和背景色重合了,所以看起来像是没显示。给你几个可行的解决办法:
指定兼容主题快速解决
实例化DatePickerDialog时,额外传入一个兼容的系统主题,比如android.R.style.Theme_Holo_Light_Dialog,修改后的代码如下:new DatePickerDialog(classname.this, android.R.style.Theme_Holo_Light_Dialog, date, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)).show();自定义主题适配你的App风格
如果不想用系统主题,你可以在styles.xml里自定义一个针对DatePickerDialog的主题,确保按钮文字颜色清晰可见:<style name="MyDatePickerDialogTheme" parent="Theme.AppCompat.Light.Dialog"> <!-- 设置按钮栏文字颜色 --> <item name="android:textColorPrimary">@color/your_visible_text_color</item> <!-- 单独设置按钮样式 --> <item name="android:buttonBarButtonStyle">@style/MyDialogButtonStyle</item> </style> <style name="MyDialogButtonStyle" parent="Widget.AppCompat.Button.ButtonBar.AlertDialog"> <item name="android:textColor">@color/your_visible_text_color</item> </style>之后在实例化时使用这个自定义主题即可:
new DatePickerDialog(classname.this, R.style.MyDatePickerDialogTheme, date, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)).show();手动设置按钮文字兜底
如果上面的方法都没效果,还可以手动获取Dialog的按钮,直接设置文字和颜色:DatePickerDialog dialog = new DatePickerDialog(classname.this, date, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)); dialog.show(); // 设置确定按钮 dialog.getButton(DatePickerDialog.BUTTON_POSITIVE).setText("确定"); dialog.getButton(DatePickerDialog.BUTTON_POSITIVE).setTextColor(getResources().getColor(R.color.your_target_color)); // 设置取消按钮 dialog.getButton(DatePickerDialog.BUTTON_NEGATIVE).setText("取消"); dialog.getButton(DatePickerDialog.BUTTON_NEGATIVE).setTextColor(getResources().getColor(R.color.your_target_color));
另外,你用的是Android Studio 3.2 Canary预览版,这类版本本身可能存在一些兼容性小问题,也可以考虑升级到稳定版的Android Studio来规避这类奇怪的适配问题。
内容的提问来源于stack exchange,提问作者Jason.Wiker




