效果图
思路
1、流程:
通过点击textview触发年份选择器dialog显示,选中年份后,更新到textview。
2、如何只显示年份?
隐藏月份和天数即可(但仍需给一个初始化数据)。
实现
1、直接新建一个工具类OnPickYearClickListener.class(可直接复制)
/**
* 年份选择器自定义
*/
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中如下调用即可
private TextView textview;
textivew = findViewById(R.id.textview);
// 监听textview的点击事件(你也可以按需替换成相应的组件类型)
textview.setOnClickListener(new OnPickYearClickListener(this, textview));