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));
相关推荐
broadview_java2 小时前
使用 ConstraintLayout 构建自适应界面
android
wy3136228215 小时前
android——开发中的常见Bug汇总与解决方案(闪退)
android·bug
小小测试开发6 小时前
实战派SQL性能优化:从语法层面攻克项目中的性能瓶颈
android·sql·性能优化
QuantumLeap丶7 小时前
《Flutter全栈开发实战指南:从零到高级》- 26 -持续集成与部署
android·flutter·ios
StarShip8 小时前
从Activity.setContentView()开始
android
千里马学框架9 小时前
重学SurfaceFlinger之Layer显示区域bounds计算剖析
android·智能手机·sf·安卓framework开发·layer·surfaceflinger·车载开发
nono牛10 小时前
安卓休眠与唤醒流程
android
二流小码农11 小时前
鸿蒙开发:个人开发者如何使用华为账号登录
android·ios·harmonyos
StarShip11 小时前
Android View框架概览
android·计算机图形学
愤怒的代码11 小时前
解析Android内存分析的指标
android·app