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));
相关推荐
敲代码的鱼哇1 小时前
发送短信/拨打电话/获取联系人能力 UTS 插件(cz-sms)
android·前端·ios·uni-app·安卓·harmonyos·鸿蒙
用户5052372099152 小时前
Android 13/14 通知权限与前台服务适配指南
android
用户5052372099152 小时前
Android 12 适配指南:SplashScreen API 与 PendingIntent 变更
android
用户5052372099152 小时前
一张表看懂 Android 8-15 所有适配要点
android
_祝你今天愉快2 小时前
Android 12 (AOSP) 添加自定义系统服务
android
程序员陆业聪5 小时前
AI编码提效实战:Skill、Rule与上下文工程
android
程序员陆业聪5 小时前
AI驱动需求梳理与Spec编写:让PRD自动变成技术方案
android
李艺为7 小时前
Android Studio使用switch匹配资源id时报需要常量表达式解决办法
android
YaBingSec9 小时前
玄机靶场-2024ccb初赛sc05 WP
android·运维·网络·笔记·安全·ssh
常利兵9 小时前
解锁Android嵌入式照片选择器,让你的App体验丝滑起飞
android