Android DatePicker的简单自定义

最近因为需求做了一个简单的选择日期的demo,我们可以同android自带的DatePicker控件达到选择日期简单联动的效果,用法挺简单的。
当在dialog在这包下android.app.AlertDialog;
选择这种样式super(context, AlertDialog.THEME_HOLO_DARK)
效果:


THEME_HOLO_DARK.gif

选择这种样式super(context, AlertDialog.THEME_HOLO_LIGHT);
效果:

THEME_HOLO_LIGHT.gif

当在dialog在这包下android.support.v7.app.AlertDialog是这种效果,
super(context, 0) 按钮的位置不一样了。。

android.support.v7.app.AlertDialog;.gif
   /*
    * Created by anymo on 2017/4/6.
    */

public class DialogDatePicker extends AlertDialog implements 
DialogInterface.OnClickListener, DatePicker.OnDateChangedListener {

     private static final String YEAR = "year";

     private static final String MONTH = "month";

     private static final String DAY = "day";

     private OnDateSetListener listener;

     private DatePicker picker;


     /******
     * 日期选择回掉事件
    */
     public interface OnDateSetListener {

    void onDateSet(DatePicker datePicker, int year, int month,

                   int day);
    }

  public DialogDatePicker(Context context, int theme,OnDateSetListener listener, int year, int month,int day) {
 //        super(context, AlertDialog.THEME_HOLO_DARK);
 //        super(context, AlertDialog.THEME_HOLO_LIGHT);
 //        super(context,AlertDialog.THEME_DEVICE_DEFAULT_DARK);        
 //       super(context,AlertDialog.THEME_DEVICE_DEFAULT_LIGHT); 
          super(context, AlertDialog.THEME_TRADITIONAL);

    this.listener = listener;
    Context themeContext = getContext();
    setButton(BUTTON_POSITIVE, "ensure", this);

    setButton(BUTTON_NEGATIVE, "cancel", this);

    setIcon(0);

    LayoutInflater inflater =(LayoutInflater)themeContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = inflater.inflate(R.layout.dialog_datepicker, null);

    setView(view);

    picker = (DatePicker) view.findViewById(R.id.datepick);

    picker.init(year, month, day, this);


    }
    @Override
    public void onClick(DialogInterface dialog, int which) {

    if (which == BUTTON_POSITIVE)
        tryNotifyDateSet();

    }

    private void tryNotifyDateSet() {

         if (listener != null) {
            picker.clearFocus();
           //月份要加1
            listener.onDateSet(picker, picker.getYear(), picker.getMonth() + 1, picker.getDayOfMonth());
         }
    }

    @Override
     public void onDateChanged(DatePicker view, int year, int 
     monthOfYear, int dayOfMonth) {

     if (view.getId() == R.id.datepick)
        picker.init(year, monthOfYear, dayOfMonth, this);
     }

 }

android:calendarViewShown="false"这个是为了不显示日历控件

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:gravity="center"
    android:layout_height="match_parent">

 <LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:padding="5dip">

    <DatePicker
        android:id="@+id/datepick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:calendarViewShown="false">

    </DatePicker>

   </LinearLayout>
 </LinearLayout>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,826评论 25 709
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,783评论 0 17
  • 西藏高原都説是離天堂最近的地方,一直以來都有許多住在平地的年輕人滿懷著「淨化心靈」的想法,或是騎車或是徒步,花上幾...
    BennyRyo阅读 165评论 0 0
  • 一、简介 众所周知,Java并发组件中的一个重要框架就是AQS,简称同步器。全称AbstractQueuedSyn...
    袁小象阅读 184评论 0 0
  • 在软件开发测试过程中,对测试人员而言最大的roadblock是什么? 需求不清楚?需求频繁更改?测试对业务不够了解...
    淡定Rui阅读 382评论 0 1