作者llI (...)
看板AndroidDev
标题Re: [问题] android 5.x DatePicker 只显示年月
时间Thu Oct 1 22:28:56 2015
先给5.x能用的程式码
xml内有设定
android:datePickerMode="spinner"
android:calendarViewShown="false"
DatePicker m = (DatePicker)this.findViewById(R.id.datePicker);
try {
//get members of DatePicker
java.lang.reflect.Field[] f = m.getClass().getDeclaredFields();
for (java.lang.reflect.Field field : f) {
Log.d("DEBUG", "DatePicker member:" + field.getName());
//find mDelegate
if(field.getName().equals("
mDelegate")) {
field.setAccessible(true);
Object mDelegate = field.get(m);
//get members of mDelegate
java.lang.reflect.Field[] f1 = mDelegate.getClass().getDeclaredFields();
for (java.lang.reflect.Field field1 : f1) {
Log.d("DEBUG", "mDelegate member:" + field1.getName());
//get mDaySpinner
if (field1.getName().equals("mDayPicker") ||
field1.getName().equals("
mDaySpinner")) {
field1.setAccessible(true);
Object dmPicker1 = field1.get(mDelegate);
//set mDaySpinner visibility to GONE
((View) dmPicker1).setVisibility(View.GONE);
}
}
}
}
}
catch (SecurityException e) {
Log.d("ERROR", e.getMessage());
}
catch (IllegalArgumentException e) {
Log.d("ERROR", e.getMessage());
}
catch (IllegalAccessException e) {
Log.d("ERROR", e.getMessage());
}
此修正来自
http://stackoverflow.com/questions/18056643/hide-date-from-date-picker
至於为什麽4.x能用5.x需要修正过呢?
因为mDaySpinner在这两个版本存在不同类别内
4.x mDaySpinner是DatePicker其中一个成员.
android.googlesource.com/platform/frameworks/base/+/kitkat-release/core/java/android/widget/DatePicker.java#75
缩址:
https://goo.gl/Oc5LMz
5.x mDaySpinner则存在於DatePickerSpinnerDelegate内
android.googlesource.com/platform/frameworks/base/+/lollipop-release/core/java/android/widget/DatePicker.java#520
缩址:
https://goo.gl/d8ctwB
如果用原本4.x的方法去取5.x DatePicker的成员,
只会得到以下四个成员,没有mDaySpinner,
因此不会跑到
((View) dmPicker1).setVisibility(View.GONE);
LOG_TAG
MODE_SPINNER
MODE_CALENDAR
mDelegate
android.googlesource.com/platform/frameworks/base/+/lollipop-release/core/java/android/widget/DatePicker.java#85
缩址:
https://goo.gl/QWRXgc
因此我们需要对DatePicker的mDelegate再做一次取其成员动作,
就可以取到mDaySpinner了,取到mDaySpinner就可以隐藏它了。
※ 引述《hyouun (hyouun)》之铭言:
: ※ 引述《peace19 (可达鸭)》之铭言:
: : android5.x以上 如何使用只显示年月的 DatePicker 网路上似乎都是4.x的方法 感谢
: 安安啊
: 因为案子刚好有需要,所以我把试过的方法跟你介绍
: 不过我是用在DatePickerDialog,所以不确定对你有没有用
: 先讲结论,我弄不出来...(躺地)
: 下收已试过的作法
: ======
: 已知5.x以上要让DatePicker显示holo造型,只要设定属性
: android:datePickerMode="spinner"
: android:calendarViewShown="false"
: 这样就可以做到了
: 但是我找不到在程式里要怎麽设定...(跪求强者解惑)
: 你可以试试看这样能不能和你找到的方法合用
: 因为我是用在DatePicker里面,目前试起来是没有用的
: 利用上述的详细作法:
: 用layout设定好属性之後,利用DatePickerDialog的setView()代入
: 然後再套4.x的那个方法
: 结果是完整的年月日picker
: 目前我的折衷作法:
: 就让它显示月历,反正我只管回传年和月就好zzz
: ======
: 因为我不清楚你的Picker是放在哪
: 所以不确定同样的方法会不会对你有效,可以试试看
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.193.201.242
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1443709740.A.8EB.html
1F:推 hyouun: 先推,明天研究研究 10/02 00:56
2F:推 peace19: 推,研究研究... 10/07 04:30