You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除Material DatePicker中显示的禁用年份?

解决Material DatePicker移除禁用年份的方法

Android平台方案

默认Material DatePicker的年份选择器会展示范围内所有年份,哪怕部分被禁用。要移除1998-2009年这类特定区间的年份,可通过自定义年份适配器实现:

  • 第一步:创建自定义YearPickerAdapter,继承默认适配器并过滤目标年份
class FilteredYearPickerAdapter(
    context: Context,
    minYear: Int,
    maxYear: Int,
    private val excludedYears: IntRange
) : MaterialYearPickerAdapter(context, minYear, maxYear) {
    override fun getYears(): List<Int> {
        return super.getYears().filterNot { it in excludedYears }
    }
}
  • 第二步:构建DatePicker时替换默认适配器
val datePicker = MaterialDatePicker.Builder.datePicker()
    .setTitleText("选择日期")
    .setSelection(MaterialDatePicker.todayInUtcMilliseconds())
    .build()

datePicker.addOnShowListener {
    val yearPicker = datePicker.findViewById<MaterialYearPicker>(com.google.android.material.R.id.mtrl_picker_year_picker)
    yearPicker?.adapter = FilteredYearPickerAdapter(
        requireContext(),
        1980, // 你的最小可选年份
        2024, // 你的最大可选年份
        1998..2009 // 需要移除的年份区间
    )
}

datePicker.show(supportFragmentManager, "DATE_PICKER_TAG")

Web端(React MUI)方案

通过renderYear属性自定义年份渲染逻辑,直接跳过目标年份的渲染:

import { DatePicker } from '@mui/material';
import TextField from '@mui/material/TextField';

function CustomDatePicker() {
  // 生成1998-2009的年份数组
  const excludedYears = Array.from({ length: 2009 - 1998 + 1 }, (_, i) => 1998 + i);

  const renderYear = (year) => {
    if (excludedYears.includes(year)) return null; // 不渲染禁用年份
    return <span>{year}</span>;
  };

  return (
    <DatePicker
      label="选择日期"
      minDate={new Date('1980-01-01')}
      maxDate={new Date('2024-12-31')}
      renderYear={renderYear}
      onChange={(date) => console.log(date)}
      renderInput={(params) => <TextField {...params} />}
    />
  );
}

内容的提问来源于stack exchange,提问作者Ruslan Slim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 05:40:30