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 小时前
二、Android 音频框架
android·音视频
studyForMokey2 小时前
【Android面试】Java专题 todo
android·java·面试
代码改善世界2 小时前
【MATLAB初阶】矩阵操作(二):矩阵的运算
android·matlab·矩阵
九皇叔叔2 小时前
MySQL实操指南:复制表及数据复制全解析
android·数据库·mysql
梦想不只是梦与想2 小时前
flutter 与 Android iOS 通信?以及实现原理(一)
android·flutter·ios·methodchannel·eventchannel·basicmessage
Lambert_lin03 小时前
Android grade9.0 之后 自定义apk 名称
android·kotlin
fengci.3 小时前
ctfshow其他(web408-web432)
android·开发语言·前端·学习·php
Kapaseker3 小时前
“点击显示全文” — Compose 实现
android·kotlin
lxysbly4 小时前
安卓土星ss模拟器下载(支持中文、金手指)
android
程序员陆业聪5 小时前
异步初始化框架设计:用拓扑排序干掉启动串行瓶颈
android