You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求助: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

火山引擎 最新活动