首先是两个布局文件 

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(安卓)技术博客(3):android 悬浮窗菜单,可用于显示在 launche
  2. Android(安卓)语音识别
  3. Android(安卓)显示/隐藏 应用图标
  4. android在Button上显示倒计时
  5. Android(安卓)Spinner不显示下拉箭头解决方案
  6. [置顶] Android加载数据过程中的菊花显示
  7. 【Android】Activity遮罩效果的实现
  8. android spinner 选中后显示字体的颜色设置
  9. android 全屏实现

随机推荐

  1. 争议 | 基于存储网关 vs 基于存储引擎,两
  2. 【Postgres扩展】pg_auto_failover支持高
  3. 「PostgreSQL技巧」Citus实时执行程序如
  4. 「数据库架构」三分钟搞懂事务隔离级别和
  5. 「云转型」 可证实的企业云转型战略
  6. 一文看懂 Kubernetes API 稳定性设计
  7. 大型三甲医院基础集成信息平台架构设计案
  8. 「首席看架构」CDC (捕获数据变化) Debez
  9. 从物理机“云”、集成云,到集成+原生“混
  10. 「企业微服务架构」怎么弥合不同微服务团