展会信息港展会大全

Android—只显示月和日的DatePickerDialog
来源:互联网   发布日期:2016-01-06 19:20:06   浏览:4821次  

导读:前言 需求要只显示月和日的日历控件,又不想自定义控件,最简单的办法就是隐藏显示年的这个框了,但DatePickerDialog并没有直接提供方法来操作,这里分享一个笨办法:)...

前言

需求要只显示月和日的日历控件,又不想自定义控件,最简单的办法就是隐藏显示年的这个框了,但DatePickerDialog并没有直接提供方法来操作,这里分享一个笨办法:)

正文

一、效果图

1.1 默认

1.2 处理后

二、实现代码

2.1代码片段1

/**

* 从当前Dialog中查找DatePicker子控件

*

* @param group

* @return

*/

private DatePicker findDatePicker(ViewGroup group) {

if (group != null) {

for (int i = 0, j = group.getChildCount(); i < j; i++) {

View child = group.getChildAt(i);

if (child instanceof DatePicker) {

return (DatePicker) child;

} else if (child instanceof ViewGroup) {

DatePicker result = findDatePicker((ViewGroup) child);

if (result != null)

return result;

}

}

}

return null;

}

代码说明:

通过断点也看到Dialog的ContentView里有DatePicker子控件,这里通过遍历的办法来查找这个控件。

2.2使用代码

final Calendar cal = Calendar.getInstance();

mDialog = new CustomerDatePickerDialog(getContext(), this,

cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),

cal.get(Calendar.DAY_OF_MONTH));

mDialog.show();

DatePicker dp = findDatePicker((ViewGroup) mDialog.getWindow().getDecorView());

if (dp != null) {

((ViewGroup) dp.getChildAt(0)).getChildAt(0).setVisibility(View.GONE);

}

代码说明:

通过源码可以看得到DatePicker内置三个NumberPicker控件,依次表示年、月、日,隐藏掉第一个即可。

三、补充

后续使用中发现标题栏也要改,通过查看DatePickerDialog源码,需要自定义并实现onDateChanged方法才可实现,如下代码:

class CustomerDatePickerDialog extends DatePickerDialog {

public CustomerDatePickerDialog(Context context,

OnDateSetListener callBack, int year, int monthOfYear,

int dayOfMonth) {

super(context, callBack, year, monthOfYear, dayOfMonth);

}

@Override

public void onDateChanged(DatePicker view, int year, int month, int day) {

super.onDateChanged(view, year, month, day);

mDialog.setTitle((month + 1) + "月" + day + "日");

}

}

作者“农民伯伯”

赞助本站

人工智能实验室

相关热词: android开发 教程

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港