android 修改DatePickerDialog只显示“年月”,去掉“日”显示
这两天在做一个项目,其中有个需求是让用户填写学业经历,那么只能选择年月,而不能出现日选择。通过在网上查资料,发现原理都是通过获取到Dialog布局中的年月日分别相对应的View,然后将其设置为GONE,即可达到效果。
但是这样会出现问题:
对于不同手机上的时间格式设置,其布局可能是不一致的,这样设置出来的效果,在不同手机上的显示效果不一致,可能在A手机上显示 年、月,而在B手机上显示的是 年、日。
解决办法:
1、在API 11以上 ( 若你的项目最低兼容版本为 11,那么第一种方法就够用了)
自定义DatePickerDialog
其构造方法:
修改Dialog的title,让其也只显示年月
public MonPickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) {super(context, callBack, year, monthOfYear, dayOfMonth);this.setTitle(year + "年" + (monthOfYear + 1) + "月");}
同样修改其Title:
@Overridepublic void onDateChanged(DatePicker view, int year, int month, int day) {super.onDateChanged(view, year, month, day);this.setTitle(year + "年" + (month + 1) + "月");}
最后在其show方法中修改要显示的内容:
@Overridepublic void show() {// TODO Auto-generated method stubsuper.show();DatePicker dp = this.getDatePicker();NumberPicker view0 = (NumberPicker) ((ViewGroup) ((ViewGroup) dp.getChildAt(0)).getChildAt(0)).getChildAt(0); //获取最前一位的宽度NumberPicker view1 = (NumberPicker) ((ViewGroup) ((ViewGroup) dp.getChildAt(0)).getChildAt(0)).getChildAt(1); //获取中间一位的宽度NumberPicker view2 = (NumberPicker) ((ViewGroup) ((ViewGroup) dp.getChildAt(0)).getChildAt(0)).getChildAt(2);//获取最后一位的宽度//年的最大值为2100//月的最大值为11//日的最大值为28,29,30,31int value0 = view0.getMaxValue();//获取第一个View的最大值int value1 = view1.getMaxValue();//获取第二个View的最大值int value2 = view2.getMaxValue();//获取第三个View的最大值if(value0 >= 28 && value0 <= 31){view0.setVisibility(View.GONE);}else if(value1 >= 28 && value1 <= 31){view1.setVisibility(View.GONE);}else if(value2 >= 28 && value2 <= 31){view2.setVisibility(View.GONE);}
}
若你的项目最低兼容版本小于11,则需要用到下面内容(因为getDatePicker()方法和NumberPicker 均在API 11以上才有)
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB){//查找DatePickerDatePicker dp = findDatePicker((ViewGroup) getWindow().getDecorView()); //获取其子控件,包含 年、月、日ViewGroup view0 = (ViewGroup)((ViewGroup) dp.getChildAt(0)).getChildAt(0);ViewGroup view1 = (ViewGroup)((ViewGroup) dp.getChildAt(0)).getChildAt(1);ViewGroup view2 = (ViewGroup)((ViewGroup) dp.getChildAt(0)).getChildAt(2);//获取子控件中的EditText显示控件(就是中间显示年月日的)EditText et0 = (EditText)view0.getChildAt(1);EditText et1 = (EditText)view1.getChildAt(1);EditText et2 = (EditText)view2.getChildAt(1);//获取当前日int dayOfMonth = dp.getDayOfMonth();//获取三个显示控件的值String str0 = et0.getText().toString().trim();String str1 = et1.getText().toString().trim();String str2 = et2.getText().toString().trim();//进行匹配,如果和当前日的值相同,则隐藏它 ( BUG:若初始化值为5月5号,可能会出错)//一般情况下 年-月-日 或者 月-日-年情况比较常见,所以先比较str[2]->str[1]->str[0],降低出错概率if((""+dayOfMonth).equals(str2)){view0.setVisibility(View.GONE);}else if((""+dayOfMonth).equals(str1)){view1.setVisibility(View.GONE);}else if((""+dayOfMonth).equals(str0)){view2.setVisibility(View.GONE);}}
/*** 低版本中获取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;}
android 修改DatePickerDialog只显示“年月”,去掉“日”显示相关推荐
- Android的DatePickerDialog只显示年月
public class YearMonthDatePickerDialog extends DatePickerDialog {public YearMonthDatePickerDialog(Co ...
- easyui datebox时间控件如何只显示年月
easyui datebox控件,只显示年月,不显示年月日 需要的效果图如下: 具体的js代码: <script>$(function(){intiMonthBox('costTime') ...
- Android日历只显示年月,只显示年
Android日历只显示年月 款式如下: public class YearPickerDialog extends DatePickerDialog {public YearPickerDialog ...
- 微博只显示来自android,修改手机发新浪微博显示的来源
我们用手机发微博的时候,会在微博下面有个"来自xxx"的来源.一些朋友想换一个显示内容,改怎么做呢?其实还是很简单的,下面是针对Android系统的操作方法: 1.首先要root你 ...
- android 改变来电号码,Android8.1 MTK平台 Dialer修改(来电全屏、归属地显示)
来电默认全屏 默认情况下,来电android是以通知窗口的形式显示,只在屏幕的顶部显示,现在改为全屏显示 修改位置 alps\vendor\mediatek\proprietary\packages\ ...
- ABAP日期函数(求月末日,第几周,search help 只显示年月) 使用方法实例
计算两个日期间的工作天数,就是剔除了双休日后的天数.( 待考证) DATE_CONVERT_TO_FACTORYDATE HR_HK_DIFF_BT_2_DATES 根据当前时间如何找到上月的第一天和 ...
- html只能选择年月,EasyUi日期控件datebox设置,只显示年月,也只能选择年月
EasyUi日期控件datebox设置,只显示年月,也只能选择年月 1.input 代码 年月 1 2 3 4 5 6 7 8 2.设置只显示年月,只能选持年月: $(function() { $(' ...
- bootstrap日期控件 只显示 年月
<!DOCTYPE html> <html lang="zh" xmlns:th="http://www.thymeleaf.org" > ...
- easyUI datebox 日期只显示年月及年月日切换的实现 js样式重新渲染加载
记录一下,最近的做的一个功能,需要在easyUI的日期框datebox 中,只显示年月格式,同时,还需要切换到年月日的格式 第一步:如何显示年月日,默认当前一天 如下代码是:报表日期及时间选择框 报表 ...
最新文章
- php签名是做什么用的,这个签名在PHP中意味着什么()?
- python程序设计教材浅显易懂_这些python自学技巧,你不会?
- Tiles Framework
- AngularJS跨域问题 ajax 跨域
- 【youcans 的 OpenCV 例程200篇】117. 形态学操作之顶帽运算
- 窄带物联网(NB-IoT)技术开发云平台的系统构架图是什么?
- theano 编程技巧
- UAT测试和SIT测试的区别
- 初识前端模板引擎jade
- 网页右下角弹出窗体实现代码
- Spring的AOP实现原理
- Docker容器的capability
- centos7 安装7z压缩命令
- HttpRequest 和HttpWebRequest的区别(转)
- 上海大学2021年博士研究生招生简章
- Java语言规格说明
- OCH1660全极高灵敏低功耗霍尔开关
- 退了IBM对日软件外包实训有些天了
- freemarker生成word之后遇到未解决的问题,希望有大佬赐教!!!
- 论通用病历文档格式标准
热门文章
- 诺基亚7 刷android p,诺基亚真良心:所有手机先升 Android O,再升 Android P
- JS中export怎么用
- 【基于UML软件建模的人事管理系统】
- 【北行★户外】6月29日周日 走进北方梦里桃花源.清凉谷.密云水库.戏水.休闲.摄影.吃虹蹲鱼.一日休闲游 !
- CentOS 6.8下mongodb数据库安装
- 麻将高效鬼牌胡牌算法(C++版)
- PAT (Advanced) 1077. Kuchiguse (20)
- GPS(Global Position System)全球定位系统原理
- 人工智能算法综述 (一)
- Excel数值函数(5):COUNTIF,统计符合指定条件的单元格数量