DatePikerDialog 和DatePicker

DatePicker 日期选择控件,DatePickerDialog 简单的封装了DatePicker的Dialog.


1.自定义DatePickerDialog修改Title


DatePickerDialog   一个年月日日期的选择Dialog,默认情况下Title内容是当前的年月日和星期,在滑动选择的同时会同步更新Title内容。

这里实现一个简单的自定义DatePickerDialog,来设置Title内容。

package com.liupan.myfamily;

import android.app.DatePickerDialog;
import android.content.Context;
import android.widget.DatePicker;

/**
 * Created by liu on 13-9-22.
 * 自定义DatePickerDialog,用于修改标题
 */
public class CustomDatePickerDialog extends DatePickerDialog {
    private String titleContent;

    public CustomDatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth, String title) {
        super(context, callBack, year, monthOfYear, dayOfMonth);
        titleContent = title;
        setTitle(titleContent);
    }

    @Override
    public void onDateChanged(DatePicker view, int year, int month, int day) {
        super.onDateChanged(view, year, month, day);
        setTitle(titleContent);
    }
}

在需要显示的时候调用即可。

   CustomDatePickerDialog dialog = new CustomDatePickerDialog(RegisterDetailActivity.this, dateSetListener, year, month, day, "请选择生日");
   dialog.show();

这样,title内容就是“请选择生日”。

在构造函数中需要传递一个Listener

  private DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker datePicker, int year, int month, int dayOfMonth) {
//DatePicker 与Listener相关的View


            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append(year);
            int newMonth = month + 1;
            if (newMonth < 10) {
                stringBuilder.append("-0").append(newMonth);
            } else {
                //字符串拼接,不要使用第一种方式,使用第二种方式链式添加,方式一的参数中又生成了新的字符串,它先完成字符串的拼接后添加到Buffer缓冲区中
                //方式二向Buffer中添加两次数据
                //方式一
//                stringBuilder.append("-" + newMonth);
                //方式二
                stringBuilder.append("-").append(newMonth);
            }
            if (dayOfMonth < 10) {
                stringBuilder.append("-0").append(dayOfMonth);
            } else {
                stringBuilder.append("-").append(dayOfMonth);
            }

            if (selectedIndex == 1) {
                birthdayEditText.setText(stringBuilder);
            } else if (selectedIndex == 2) {
                memory.setText(stringBuilder);
            }
        }
    };


2.  上边的方式可能的问题

DatePickerDialog.OnDateSetListener

这个接口在日期由修改的时候会回掉,其中在点击取消或者Back键时,同样会传递选择的时间。可能会想到监听“确定”按钮,然后通过DatePickerDialog获取DatePicker,然后获取用户选择的年,月,日,但是需要注意DatePickerDialog getDatePicker方法在API11,也就是3.0才有的,所以如果想要兼容3.0以下的话,就不能使用DatePickerDialog了。这时就需要定义DatePicker控件,然后builder.setView()设置Dialog的内容为DatePicker控件


    AlertDialog.Builder builder = new AlertDialog.Builder(RegisterDetailActivity.this);
        builder.setTitle("请选择生日日期");
        final DatePicker datePicker = new DatePicker(RegisterDetailActivity.this);
        builder.setView(datePicker);
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                int year = datePicker.getYear();
                int month = datePicker.getMonth();
                int dayOfMonth = datePicker.getDayOfMonth();

                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.append(year);
                int newMonth = month + 1;
                if (newMonth < 10) {
                    stringBuilder.append("-0").append(newMonth);
                } else {
                    stringBuilder.append("-").append(newMonth);
                }
                if (dayOfMonth < 10) {
                    stringBuilder.append("-0").append(dayOfMonth);
                } else {
                    stringBuilder.append("-").append(dayOfMonth);
                }
                TextView birthday = (TextView) findViewById(R.id.birthday);
                birthday.setText(stringBuilder.toString());

                TextView chineseZodiacText = (TextView) findViewById(R.id.chineseZodiac);
                chineseZodiacText.setVisibility(View.VISIBLE);
                String chineseZodiac = getChineseZodiac(year);
                chineseZodiacText.setText(chineseZodiac);

                TextView horoscopesText = (TextView) findViewById(R.id.horoscopes);
                horoscopesText.setVisibility(View.VISIBLE);
                String horoscopes = getHoroscopes(newMonth, dayOfMonth);
                horoscopesText.setText(horoscopes);
            }
        });
        builder.setNegativeButton("取消", null);
        builder.show();




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值