【问题标题】:Change DatePickerDialog buttons to text将 DatePickerDialog 按钮更改为文本
【发布时间】:2018-11-28 11:19:41
【问题描述】:

嗨,我想调整我的DatePickerDialog,而不是底部的按钮(如下图所示),我只想制作蓝色文本。

这是我创建 DatePickerDialog 的方式

private val birthdayDate by lazy {
    Calendar.getInstance()
}
private val datePicker by lazy {
    DatePickerDialog(
        context,
        R.style.MyDatePickerDialogTheme,
        this,
        birthdayDate.get(Calendar.YEAR),
        birthdayDate.get(Calendar.MONTH),
        birthdayDate.get(Calendar.DAY_OF_MONTH)
    ).also {
        it.datePicker.maxDate = Calendar.getInstance().timeInMillis
    }
}

然后我只需调用 show 方法来显示对话框。我认为问题出在我的style 中,但我找不到在哪里。任何帮助将不胜感激。

<style name="MyDatePickerDialogTheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorAccent">@color/colorPrimary</item>
</style>

【问题讨论】:

标签: android kotlin android-datepicker


【解决方案1】:

所以我终于找到了解决方案。我在MyDatePickerDialogTheme 中添加了额外的字段,并为DatePicker 中使用的按钮添加了额外的样式。解决方案如下:

<style name="MyDatePickerDialogTheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorAccent">@color/colorPrimary</item>
    <item name="android:buttonBarPositiveButtonStyle">@style/DatePickerButtonStyle</item>
    <item name="android:buttonBarNegativeButtonStyle">@style/DatePickerButtonStyle</item>
</style>

<style name="DatePickerButtonStyle" parent="Base.Widget.AppCompat.Button.Borderless">
    <item name="android:textColor">@color/colorPrimary</item>
    <item name="android:backgroundTint">@color/white</item>
</style>

【讨论】:

    【解决方案2】:

    当您使用 MaterialDesign 时,您可以使用它。

    final SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy");
    final Calendar calendar = Calendar.getInstance(parent.getResources().getConfiguration().locale);
    
    DatePickerDialog datePickerDialog = new DatePickerDialog(parent.getContext(), 
    (view, year, monthOfYear, dayOfMonth) -> {
         Calendar selectedDate = Calendar.getInstance();
         selectedDate.set(year, monthOfYear, dayOfMonth);
         }, 
    calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
    datePicker.show();
    

    styles.xml:

    <style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
        <item name="android:datePickerStyle">@style/DatePicker</item>
        <item name="android:datePickerDialogTheme">@style/DatePicker</item>
    </style>
    
    <style name="DatePicker" parent="ThemeOverlay.MaterialComponents.Dialog">
        <item name="colorAccent">@color/blue</item>
        <item name="android:datePickerStyle">@style/DatePickerStyle</item>
    </style>
    
    <style name="DatePickerStyle" parent="@android:style/Widget.Material.Light.DatePicker">
        <item name="android:headerBackground">@color/darkblue</item>
        <item name="android:yearListSelectorColor">@color/darkgray</item>
        <item name="android:datePickerMode">calendar</item>
        <item name="android:minDate">01/01/2000</item>
    </style>
    

    这种样式将导致没有轮廓或填充框按钮。您的取消和确认按钮将以 colorAccents 颜色显示。

    【讨论】:

      【解决方案3】:

      在此link 中列出 你可以使用这个主题

      DatePickerDialog dpd = new DatePickerDialog(getActivity(),
                          AlertDialog.THEME_DEVICE_DEFAULT_LIGHT,this,year,month,day); 
      

      实现你想要的

      【讨论】:

        【解决方案4】:

        与默认日期选择器相比,当前投票最多的答案更改了按钮的默认 minHeightminWidth
        为了纠正这个问题,我必须在自定义样式中指定这些属性。
        我能够找到minWidth 的标准属性,但默认minHeight 在运行时具有54dp 值,我在标准Android 值中找不到该值。
        此示例直接使用 Material 主题。

        <style name="Theme.AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
          .....
          <item name="android:datePickerDialogTheme">@style/DatePickerDialogTheme</item>
        </style>
        
        <style name="DatePickerDialogTheme" parent="android:Theme.Material.Light.Dialog">
          <item name="android:colorAccent">@color/colorPrimary<item>
          <item name="android:buttonBarPositiveButtonStyle">@style/DatePickerButtonStyle</item>
          <item name="android:buttonBarNegativeButtonStyle">@style/DatePickerButtonStyle</item>
        </style>
        
        <style name="DatePickerButtonStyle" parent="android:Widget.Material.Button.Borderless">
          <item name="android:minHeight">54dp</item>
          <item name="android:minWidth">@dimen/mtrl_btn_dialog_btn_min_width</item>
          <item name="android:textColor">@color/colorPrimary</item>
        </style>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-05
          • 1970-01-01
          • 1970-01-01
          • 2021-12-10
          • 2012-11-07
          • 1970-01-01
          相关资源
          最近更新 更多