首先是两个布局文件 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>    

view_date_picker_dialog.xml

<?xml version="1.0" encoding="utf-8"?>                                        

两个java文件

MainActivity.java

package com.example.myapplication;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.TextView;import java.text.SimpleDateFormat;import java.util.Date;public class MainActivity extends AppCompatActivity implements View.OnClickListener,DateTimeDialogOnlyYMD.MyOnDateSetListener{    Button ymd,ym,y;    TextView time;    private DateTimeDialogOnlyYMD dateTimeDialogOnlyYM;    private DateTimeDialogOnlyYMD dateTimeDialogOnlyYMD;    private DateTimeDialogOnlyYMD dateTimeDialogOnlyYear;//    private SimpleDateFormat mFormatter = new SimpleDateFormat("yyyy-MM-dd");    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        dateTimeDialogOnlyYMD = new DateTimeDialogOnlyYMD(this, this, true, true, true);        dateTimeDialogOnlyYM = new DateTimeDialogOnlyYMD(this, this, false, true, true);        dateTimeDialogOnlyYear = new DateTimeDialogOnlyYMD(this, this, false, false, true);        initView();    }    public void initView(){        time = (TextView) findViewById(R.id.time);        ymd = (Button) findViewById(R.id.ymd);        ymd.setOnClickListener(this);        ym = (Button) findViewById(R.id.ym);        ym.setOnClickListener(this);        y = (Button) findViewById(R.id.y);        y.setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch (v.getId()){            case R.id.ymd:                showYMD();                break;            case R.id.ym:                showYM();                break;            case R.id.y:                showYear();                break;        }    }    private void showYear() {        dateTimeDialogOnlyYear.hideOrShow();    }    private void showYM() {        dateTimeDialogOnlyYM.hideOrShow();    }    private void showYMD() {        dateTimeDialogOnlyYMD.hideOrShow();    }    @Override    public void onDateSet(Date date,int type) {        String str = mFormatter.format(date);        String[] s =  str.split("-");        if (type ==1){           time.setText(s[0]);        }else if (type ==2){            time.setText(s[0]+"-"+s[1]);        }else if (type ==3){            time.setText(s[0]+"-"+s[1]+"-"+s[2]);        }    }}
DateTimeDialogOnlyYMD.java
package com.example.myapplication;import android.app.AlertDialog;import android.content.Context;import android.util.Log;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.view.WindowManager;import android.widget.Button;import android.widget.DatePicker;import android.widget.LinearLayout;import java.util.Calendar;import java.util.Date;/** * 自定义 日期 选择 器  只能选择 日月年 * Created by Administrator on 2016/6/22. */public class DateTimeDialogOnlyYMD extends AlertDialog implements View.OnClickListener {    private DatePicker mDatePicker;    private MyOnDateSetListener onDateSetListener;    private Button cancleButton, okButton;    // 控制 日期    private int measureWidth;    // 是否 显示 日选择器   true 显示 ,false 隐藏    private boolean isDayVisible = true;    // 是否 显示 月选择器   true 显示 ,false 隐藏    private boolean isMonthVisible = true;    // 是否 显示 年选择器   true 显示 ,false 隐藏    private boolean isYearVisible = true;    protected DateTimeDialogOnlyYMD(Context context) {        super(context);    }    protected DateTimeDialogOnlyYMD(Context context, boolean cancelable, OnCancelListener cancelListener) {        super(context, cancelable, cancelListener);    }    /**     * @param context        上下文对象     * @param callBack       选择 监听器     * @param isDayVisible   日 是否可见     * @param isMonthVisible 月 是否可见     * @param isYearVisible  年 是否可见     */    public DateTimeDialogOnlyYMD(Context context, MyOnDateSetListener callBack, boolean isDayVisible, boolean isMonthVisible, boolean isYearVisible) {        super(context);        this.isDayVisible = isDayVisible;        this.isMonthVisible = isMonthVisible;        this.isYearVisible = isYearVisible;        this.onDateSetListener = callBack;        this.isDayVisible = isDayVisible;        init();    }    private void init() {        LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);        View view = inflater.inflate(R.layout.view_date_picker_dialog, null);        setView(view);        mDatePicker = (DatePicker) view.findViewById(R.id.datePicker);        LinearLayout buttonGroup = (LinearLayout) view.findViewById(R.id.buttonGroup);        cancleButton = (Button) view.findViewById(R.id.cancelButton);        okButton = (Button) view.findViewById(R.id.okButton);        Calendar mCalendar = Calendar.getInstance();        mCalendar.setTime(new Date());        cancleButton.setOnClickListener(this);        okButton.setOnClickListener(this);        // 是否 显示 年        if (!this.isYearVisible) {            ((ViewGroup) ((ViewGroup) mDatePicker.getChildAt(0)).getChildAt(0)).getChildAt(0).setVisibility(View.GONE);        }        // 是否 显示 月        if (!this.isMonthVisible) {            ((ViewGroup) ((ViewGroup) mDatePicker.getChildAt(0)).getChildAt(0)).getChildAt(1).setVisibility(View.GONE);        }        // 是否 显示 日        if (!this.isDayVisible) {            ((ViewGroup) ((ViewGroup) mDatePicker.getChildAt(0)).getChildAt(0)).getChildAt(2).setVisibility(View.GONE);        }        // 设置 显示 宽高        int width = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);        int height = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);        buttonGroup.measure(width, height);        mDatePicker.measure(width, height);        if (buttonGroup.getMeasuredWidth() > mDatePicker.getMeasuredWidth()) {            this.measureWidth = buttonGroup.getMeasuredWidth();        } else {            this.measureWidth = mDatePicker.getMeasuredWidth();        }//        Log.i("testss", this.measureWidth + "measuredWidth");    }    public void hideOrShow() {        if (this == null) {            return;        }        if (!this.isShowing()) {            this.show();            //设置 显示 的 宽高            WindowManager.LayoutParams attributes = this.getWindow().getAttributes();            attributes.width = this.measureWidth + 100;            this.getWindow().setAttributes(attributes);        } else {            this.dismiss();        }    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.cancelButton:                dismiss();                break;            case R.id.okButton:                if (isYearVisible == true && isMonthVisible == false && isDayVisible == false){                    Log.e("type","年选择器");                    onOkButtonClick(1);                }else if (isYearVisible == true && isMonthVisible == true && isDayVisible == false){                    Log.e("type","年月选择器");                    onOkButtonClick(2);                }else if (isYearVisible == true && isMonthVisible == true && isDayVisible == true){                    Log.e("type","年月日选择器");                    onOkButtonClick(3);                }                dismiss();                break;        }    }    /**     * 确认 按钮 点击 事件     */    private void onOkButtonClick(int type) {        Calendar calendar = Calendar.getInstance();        calendar.set(Calendar.YEAR, mDatePicker.getYear());        calendar.set(Calendar.MONTH, mDatePicker.getMonth());        calendar.set(Calendar.DAY_OF_MONTH, mDatePicker.getDayOfMonth());        calendar.getTime();        if (onDateSetListener != null) {            if (type == 1){                onDateSetListener.onDateSet(calendar.getTime(),1);            }else if (type ==2){                onDateSetListener.onDateSet(calendar.getTime(),2);            }else if (type ==3){                onDateSetListener.onDateSet(calendar.getTime(),3);            }        }        Log.i("testss", mDatePicker.getYear() + "====" + (mDatePicker.getMonth() + 1) + "==" + mDatePicker.getDayOfMonth());    }    /**     * 时间  改变 监听     */    public interface MyOnDateSetListener {        void onDateSet(Date date,int type);    }}

亲测可用,由于代码量不多,就不上传整个项目了。

更多相关文章

  1. android 关于listview scrollview 底部 控件无法显示的两个解决
  2. Android初次使用遇到的两个问题
  3. 如何同时启动两个Android模拟器
  4. Android DatePickerDialog 只显示年月
  5. android,handler实现两个线程通信
  6. 2010.11.16———android Camera 拍照的两个问题
  7. Android退出多个Activity的两个经典方法
  8. Android Fragment基础之动态添加Fragment 实现两个Fragment之间
  9. Android之AIDL实现两个app的调用以及双进程app的进程通信

随机推荐

  1. Android之组件详解
  2. android bolg and other
  3. android 混编源代码
  4. Android AIDL进程间通信的简单使用
  5. android的单选框例子
  6. Android Studio 生成UML类图
  7. android 横向切换 activity
  8. android/IOS SDK怎么判断用户是否安装了
  9. android 自定义具有反弹效果的ScrollView
  10. Linux SVN命令