android 只显示年月的日历

这是一篇不完整的文章 希望看到的读者 能够 跟我完善一下 !
这系统自带的日历 多多少少 会有弊端 !
手机版本不一样 操作不一样 所以我们在判断隐藏某一部分之前 还要判断api的版本

这是我要达成的效果图 .png

1.首先继承一下系统自带的日历dialog

public class YearPickerDialog extends DatePickerDialog {
    public YearPickerDialog(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);
        this.setTitle(year + "年" );
    }
}

2.写一个遍历方法

 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;
    }

3.调用

final Calendar calendar = Calendar.getInstance();
        YearPickerDialog dialog=   new YearPickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                calendar.set(Calendar.YEAR, year);
                calendar.set(Calendar.MONTH, monthOfYear);
                LogUtils.d(DateUtil.clanderTodatetime(calendar, "yyyy-MM"));
            }
        },calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE));
        dialog.show();


        DatePicker dp = findDatePicker((ViewGroup) dialog.getWindow().getDecorView());
        if (dp != null) {
            ((ViewGroup)((ViewGroup) dp.getChildAt(0)).getChildAt(0)).getChildAt(1).setVisibility(View.GONE);
        }

4.其中的DateUtil 类方法

public static String clanderTodatetime(Calendar calendar, String style) {
        SimpleDateFormat formatter = new SimpleDateFormat(style);
        return formatter.format(calendar.getTime());
    }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,638评论 25 709
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,758评论 0 17
  • 真没觉得《喜欢你》有那么好看。金城武肯定是帅,周冬雨也是典型的“傻白甜”,互不知情的两人一道道菜做着吃着,相遇时则...
    应晓菲阅读 238评论 0 1
  • 下楼拿快递,3部电梯都跳过了我这层,直奔顶楼,然后门开了,里面是一个女人。我闪身走进了电梯,站在她身后。我打量着这...
    小杏仁阅读 442评论 3 3
  • 最近感触比较深的就是:搭建环境已从原来的技术问题变成一个执行问题。以前搭建一个环境跳N个坑,费九牛二虎之力,现在一...
    灼灼2015阅读 2,940评论 0 2