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);
    }
}


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

[java]  view plain copy
  1. CustomDatePickerDialog dialog = new CustomDatePickerDialog(RegisterDetailActivity.this, dateSetListener, year, month, day, "请选择生日");  
  2. dialog.show();  

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

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

[java]  view plain copy
  1. private DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {  
  2.       @Override  
  3.       public void onDateSet(DatePicker datePicker, int year, int month, int dayOfMonth) {  
  4. DatePicker 与Listener相关的View  
  5.   
  6.   
  7.           StringBuilder stringBuilder = new StringBuilder();  
  8.           stringBuilder.append(year);  
  9.           int newMonth = month + 1;  
  10.           if (newMonth < 10) {  
  11.               stringBuilder.append("-0").append(newMonth);  
  12.           } else {  
  13.               //字符串拼接,不要使用第一种方式,使用第二种方式链式添加,方式一的参数中又生成了新的字符串,它先完成字符串的拼接后添加到Buffer缓冲区中  
  14.               //方式二向Buffer中添加两次数据  
  15.               //方式一  
  16.                 stringBuilder.append("-" + newMonth);  
  17.               //方式二  
  18.               stringBuilder.append("-").append(newMonth);  
  19.           }  
  20.           if (dayOfMonth < 10) {  
  21.               stringBuilder.append("-0").append(dayOfMonth);  
  22.           } else {  
  23.               stringBuilder.append("-").append(dayOfMonth);  
  24.           }  
  25.   
  26.           if (selectedIndex == 1) {  
  27.               birthdayEditText.setText(stringBuilder);  
  28.           } else if (selectedIndex == 2) {  
  29.               memory.setText(stringBuilder);  
  30.           }  
  31.       }  
  32.   };  


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

DatePickerDialog.OnDateSetListener

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


[java]  view plain copy
  1. AlertDialog.Builder builder = new AlertDialog.Builder(RegisterDetailActivity.this);  
  2.     builder.setTitle("请选择生日日期");  
  3.     final DatePicker datePicker = new DatePicker(RegisterDetailActivity.this);  
  4.     builder.setView(datePicker);  
  5.     builder.setPositiveButton("确定"new DialogInterface.OnClickListener() {  
  6.         @Override  
  7.         public void onClick(DialogInterface dialog, int which) {  
  8.             int year = datePicker.getYear();  
  9.             int month = datePicker.getMonth();  
  10.             int dayOfMonth = datePicker.getDayOfMonth();  
  11.   
  12.             StringBuilder stringBuilder = new StringBuilder();  
  13.             stringBuilder.append(year);  
  14.             int newMonth = month + 1;  
  15.             if (newMonth < 10) {  
  16.                 stringBuilder.append("-0").append(newMonth);  
  17.             } else {  
  18.                 stringBuilder.append("-").append(newMonth);  
  19.             }  
  20.             if (dayOfMonth < 10) {  
  21.                 stringBuilder.append("-0").append(dayOfMonth);  
  22.             } else {  
  23.                 stringBuilder.append("-").append(dayOfMonth);  
  24.             }  
  25.             TextView birthday = (TextView) findViewById(R.id.birthday);  
  26.             birthday.setText(stringBuilder.toString());  
  27.   
  28.             TextView chineseZodiacText = (TextView) findViewById(R.id.chineseZodiac);  
  29.             chineseZodiacText.setVisibility(View.VISIBLE);  
  30.             String chineseZodiac = getChineseZodiac(year);  
  31.             chineseZodiacText.setText(chineseZodiac);  
  32.   
  33.             TextView horoscopesText = (TextView) findViewById(R.id.horoscopes);  
  34.             horoscopesText.setVisibility(View.VISIBLE);  
  35.             String horoscopes = getHoroscopes(newMonth, dayOfMonth);  
  36.             horoscopesText.setText(horoscopes);  
  37.         }  
  38.     });  
  39.     builder.setNegativeButton("取消"null);  
  40.     builder.show();  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值