自定义 DatePicker 只显示年月选择器

自定义 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值