自定义 DatePicker 只显示年月选择器
先看效果图
自定义 DatePickerDialog,适用于安卓7.0 及以前系统,话不多说,直接上代码
首先自定义一个 MyNumberPicker.java:
public class MyNumberPicker extends NumberPicker {
public MyNumberPicker(Context context) {
super(context);
}
public MyNumberPicker(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyNumberPicker(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void addView(View child) {
super.addView(child);
updateView(child);
}
@Override
public void addView(View child, ViewGroup.LayoutParams params) {
super.addView(child, params);
updateView(child);
}
@Override
public void addView(View child, int index, ViewGroup.LayoutParams params) {
super.addView(child, index, params);
updateView(child);
}
private void updateView(View view) {
if (view instanceof EditText) {
((EditText) view).setTextColor(getResources().getColor(R.color.grey));
((EditText) view).setTextSize(16);
((EditText) view).setHighlightColor(Color.TRANSPARENT);
}
}
然后定义一个 MyDatePickerDialog.java
public class MyDatePickerDialog extends Dialog implements NumberPicker.OnValueChangeListener, View.OnClickListener {
private Context context;
private OnSureListener onSureListener;
private TextView tv_title_year, tv_title_month;
private MyNumberPicker mnp_year, mnp_month;
private Button btn_sure, btn_cancel;
public MyDatePickerDialog(Context context){
super(context);
this.context = context;
}
public interface OnSureListener{
void back(String name);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_view);
tv_title_year = (TextView) findViewById(R.id.tv_title_year);
tv_title_month = (TextView) findViewById(R.id.tv_title_month);
mnp_year = (MyNumberPicker) findViewById(R.id.mnp_year);
mnp_month = (MyNumberPicker) findViewById(R.id.mnp_month);
btn_sure = (Button) findViewById(R.id.btn_sure);
btn_cancel = (Button) findViewById(R.id.btn_cancel);
mnp_year.setOnValueChangedListener(this);
mnp_month.setOnValueChangedListener(this);
btn_sure.setOnClickListener(this);
btn_cancel.setOnClickListener(this);
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT + 08:00"));
mnp_year.setMaxValue(2050);
mnp_year.setMinValue(1900);
mnp_year.setValue(calendar.get(Calendar.YEAR));
tv_title_year.setText(String.valueOf(calendar.get(Calendar.YEAR)));
mnp_month.setMaxValue(12);
mnp_month.setMinValue(1);
mnp_month.setValue(calendar.get(Calendar.MONTH) + 1);
tv_title_month.setText(String.valueOf(calendar.get(Calendar.MONTH) + 1));
// set NumberPicker font color and divider color
setNumberPickerDividerColor(mnp_year, context.getResources().getColor(R.color.blue));
setNumberPickerTextColor(mnp_year, context.getResources().getColor(R.color.grey));
setNumberPickerDividerColor(mnp_month, context.getResources().getColor(R.color.blue));
setNumberPickerTextColor(mnp_month, context.getResources().getColor(R.color.grey));
// Prohibit rolling
mnp_year.setWrapSelectorWheel(false);
mnp_month.setWrapSelectorWheel(false);
}
public void setOnSureListener(OnSureListener onSureListener){
this.onSureListener = onSureListener;
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn_sure:
onSureListener.back(String.valueOf(tv_title_year.getText().toString() + "-" + tv_title_month.getText().toString()));
this.dismiss();
break;
case R.id.btn_cancel:
this.dismiss();
break;
}
}
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
switch (picker.getId()){
case R.id.mnp_year:
tv_title_year.setText(String.valueOf(newVal));
break;
case R.id.mnp_month:
tv_title_month.setText(String.valueOf(newVal));
break;
}
}
最后开始使用
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn_show = (Button) findViewById(R.id.btn_show);
btn_show.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MyDatePickerDialog datePickerDialog = new MyDatePickerDialog(MainActivity.this);
datePickerDialog.setOnSureListener(new MyDatePickerDialog.OnSureListener() {
@Override
public void back(String name) {
Toast.makeText(MainActivity.this, name, Toast.LENGTH_SHORT).show();
}
});
datePickerDialog.show();
}
});
}
}
布局很简单,不再给出。
最后附上 Demo 下载地址:http://download.csdn.net/detail/qiushuiduren/9788485