600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Android中自定义日期选择对话框(DatePicker只显示年 月)

Android中自定义日期选择对话框(DatePicker只显示年 月)

时间:2019-01-21 19:07:40

相关推荐

Android中自定义日期选择对话框(DatePicker只显示年 月)

前言

系统提供的DatePicker会完整地显示年、月、日,而且其中的很多样式都不能自己调节。本篇文章所讲的年、月对话框效果如下图所示:

点击“确认”,会进入回调函数,可以获取你选择的年、月信息。

主要代码

CustomDateDialog.java

import android.app.Dialog;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.view.Window;import android.widget.DatePicker;import android.widget.LinearLayout;import android.widget.TextView;import java.util.Calendar;/*** @author Yingyong Lao* 创建时间 /6/14 16:28* @version 1.0*/public class CustomDateDialog implements View.OnClickListener, DatePicker.OnDateChangedListener {private Dialog dialog;private TextView titleTv;//标题private DatePicker datePicker;//日期选择控件private TextView confirmTv;//底部的“确认”private View dialogView;private OnDateSetListener onDateSetListener;/*** 构造器* @param context 上下文*/public CustomDateDialog(Context context){dialogView = LayoutInflater.from(context).inflate(R.layout.date_dialog, null);dialog=new Dialog(context,R.style.CustomDateDialog);titleTv=dialogView.findViewById(R.id.titleTv);datePicker=dialogView.findViewById(R.id.datePicker);ViewGroup viewGroup1= (ViewGroup) datePicker.getChildAt(0);ViewGroup viewGroup2= (ViewGroup) viewGroup1.getChildAt(0);//获取年月日的下拉列表项if(viewGroup2.getChildCount()==3){//有的机型没有竖线,只有年、月、日viewGroup2.getChildAt(2).setVisibility(View.GONE);}else if(viewGroup2.getChildCount()==5){//有的机型有有竖线viewGroup2.getChildAt(3).setVisibility(View.GONE);viewGroup2.getChildAt(4).setVisibility(View.GONE);}confirmTv=dialogView.findViewById(R.id.confirmTv);confirmTv.setOnClickListener(this);}/*** 显示对话框*/public void show(){Window window = dialog.getWindow();window.setContentView(dialogView);//设置对话框窗口的内容视图(这里有个坑,参数不要传R.layout.date_dialog,否则会出现各种问题,比如按钮响应不了点击事件)window.setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);//设置对话框窗口的布局参数dialog.show();dialog.setCancelable(false);}/*** 关闭对话框*/public void dismiss(){if(dialog!=null&&dialog.isShowing()){dialog.dismiss();}}/*** 设置标题* @param title 标题*/public void setTitle(String title){titleTv.setText(title);}public void setDate(int year,int month,OnDateSetListener onDateSetListener){Calendar calendar = Calendar.getInstance();datePicker.init(year,month,calendar.get(Calendar.DAY_OF_MONTH),this);this.onDateSetListener=onDateSetListener;}@Overridepublic void onClick(View v) {if(v.getId()==R.id.confirmTv){dialog.dismiss();if(onDateSetListener!=null){datePicker.clearFocus();int year = datePicker.getYear();int month = datePicker.getMonth();int day = datePicker.getDayOfMonth();onDateSetListener.onDateSet(year,month+1);}}}@Overridepublic void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {datePicker.init(year,monthOfYear,dayOfMonth,this);}public interface OnDateSetListener{void onDateSet(int year,int month);}}

MainActivity.java

public class MainActivity extends AppCompatActivity {private CustomDateDialog dialog;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {dialog=new CustomDateDialog(MainActivity.this);Calendar calendar=Calendar.getInstance();dialog.setDate(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), new CustomDateDialog.OnDateSetListener() {@Overridepublic void onDateSet(int year, int month) {Toast.makeText(MainActivity.this, ""+year+month, Toast.LENGTH_LONG).show();}});dialog.show();}});}}

源码

项目已经托管到了码云上,上面我只贴了两个java文件的代码,但是项目中的界面布局、背景xml以及样式style等我就不贴了。点我下载源码

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。