android 年月日选择器(可选择年,年月,年月日)
16lz
2021-12-04
首先是两个布局文件
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); }}
亲测可用,由于代码量不多,就不上传整个项目了。
更多相关文章
- Android(安卓)技术博客(3):android 悬浮窗菜单,可用于显示在 launche
- Android(安卓)语音识别
- Android(安卓)显示/隐藏 应用图标
- android在Button上显示倒计时
- Android(安卓)Spinner不显示下拉箭头解决方案
- [置顶] Android加载数据过程中的菊花显示
- 【Android】Activity遮罩效果的实现
- android spinner 选中后显示字体的颜色设置
- android 全屏实现