Android年份选择器(超简单-可直接复制使用)

效果图

思路

1、流程:

通过点击textview触发年份选择器dialog显示,选中年份后,更新到textview。

2、如何只显示年份?

隐藏月份和天数即可(但仍需给一个初始化数据)。

实现

1、直接新建一个工具类OnPickYearClickListener.class(可直接复制)

java 复制代码
/**
 * 年份选择器自定义
 */
public class OnPickYearClickListener implements View.OnClickListener {
    private Context context;
    private TextView textview; // 选中的年份显示文本标签(按你自己需求替换对应的组件类型)
    private int now_choose_year; // 当前选中年份(默认今年)

    /**
     * 年份选择器初始化
     * @param context
     * @param textview
     */
    public OnPickYearClickListener(Context context, TextView textview) {
        
        // 绑定
        this.context = context;
        this.textview = textview;

        // 初始化当前选中年份
        final Calendar c = Calendar.getInstance();
        now_choose_year = c.get(Calendar.YEAR);

        // 更新文本标签
        setTextYear(now_choose_year);
    }

    /**
     * 年份选择器触发显示
     * @param v
     */
    @Override
    public void onClick(View v) {
        // 获取当前时间
        final Calendar c = Calendar.getInstance();
        int monthOfYear = c.get(Calendar.MONTH);
        int dayOfMonth = c.get(Calendar.DAY_OF_MONTH);

        // 显示选择器
        DatePickerDialog datePickerDialog = new DatePickerDialog(context, DatePickerDialog.THEME_HOLO_LIGHT, mDateSetListener, now_choose_year, monthOfYear, dayOfMonth);
        DatePicker datePicker = datePickerDialog.getDatePicker();
        ((ViewGroup) ((ViewGroup) datePicker.getChildAt(0)).getChildAt(0)).getChildAt(1).setVisibility(View.GONE); // 隐藏月份
        ((ViewGroup) ((ViewGroup) datePicker.getChildAt(0)).getChildAt(0)).getChildAt(2).setVisibility(View.GONE); // 隐藏日
        datePickerDialog.show();
    }

    /**
     * 年份选择器-选中后监听
     */
    private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            setTextYear(year); // 更新文本标签
            now_choose_year = year; // 更新选中选项
        }
    };

    /**
     * 修改textview年份显示
     * @param year
     */
    private void setTextYear(int year) {
        textview.setText(String.valueOf(new StringBuilder().append(year))); // 更新文本标签
    }

}

2、在需要使用的activity中如下调用即可

java 复制代码
private TextView textview;

textivew = findViewById(R.id.textview);

// 监听textview的点击事件(你也可以按需替换成相应的组件类型)
textview.setOnClickListener(new OnPickYearClickListener(this, textview));
相关推荐
ltlovezh9 小时前
ROI 编码学习指南:Android 与 FFmpeg 的真实实现边界
android·ffmpeg·音视频开发
心前阳光10 小时前
Unity之2021.3.45f2c1发布安卓程序遇到的问题
android·unity·游戏引擎
utf8mb4安全女神11 小时前
MySQL5.7升级到MySQL8.0并进行数据迁移
android
黄林晴11 小时前
Android XR DP4 重磅发布:手机 App 直投眼镜,Compose 原生玩转 3D 内容
android·google io
炼川淬海DB13 小时前
数据库开发规范
android·adb·数据库开发
2501_9159184113 小时前
iOS App性能测试工具的实现方法与优化循环指南
android·ios·小程序·https·uni-app·iphone·webview
天天爱吃肉821814 小时前
豆包 vs DeepSeek API 对比分析报告
android·java·大数据·开发语言·功能测试·嵌入式硬件·汽车
问心无愧051315 小时前
ctf show web入门123
android·前端·笔记
想你依然心痛15 小时前
手机远程控制电脑教程:安卓iOS远程桌面推荐、免费工具配置与远程办公技巧
android·智能手机·电脑