gpt4 book ai didi

Android DatePicker 月份作为整数

转载 作者:行者123 更新时间:2023-11-29 18:11:18 29 4
gpt4 key购买 nike

我有一个简单的问题,但在搜索了一段时间后我还没有找到答案。在 DatePicker 中,是否可以将月份更改为整数而不是字符串?例如:{1,2,3..} 而不是 {jan,feb,mar...}

编辑:

虽然@kaneda 的解决方案似乎有效,但在 android 3.0 中至少方法和属性不一样。我使用的代码是这样的:

public DatePickerCustom(Context context, AttributeSet attrs) {
super(context, attrs);
Field[] fields = DatePicker.class.getDeclaredFields();
try {
for (Field field : fields) {
field.setAccessible(true);
if (TextUtils.equals(field.getName(), "mMonthSpinner")) {
Method m = field.getType().getDeclaredMethod("setDisplayedValues", String[].class);
m.setAccessible(true);
String[] s = new String[] {"01","02","03","04","05","06","07","08","09","10","11","12"};
Object[] params = new Object[1];
params[0] = s;
m.invoke(field.get(this), params);
break;
}
}
}
catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}

编辑 2:

最好的解决方案是创建一个自定义 DatePicker(遵循@kaneda 的第一个建议),它将始终工作而不会出现兼容性问题并且不会依赖反射。

使用了 date_picker.xml来自 @kaneda 发布的 android 和 DatePicker.java。另外,我使用了自定义的 NumberPicker(因为 DatePicker 小部件使用的是 android 内部的)。对于 NumberPicker 小部件,我遵循了这个 link .

在 CustomDatePicker 中,我注释了函数 getShortMonths() 并将月份范围设置为 mMonthPicker.setRange(1, NUMBER_OF_MONTHS);

最佳答案

关于最佳实践,我认为如果您通过创建自己的布局来创建自己的自定义 DatePicker 是最正确和最容易的,所以我建议您看看它的源代码供引用:

Android Source Code

Here

这就是奇特的方式。丑陋的方式,你可以这样做:

安卓版本<3.0

package my.pkg;
...
class MyDatePicker extends DatePicker {

public MyDatePicker(Context context, AttributeSet attrs) {
super(context, attrs);
Field[] fields = DatePicker.class.getDeclaredFields();
try {
for (Field field : fields) {
field.setAccessible(true);
if (TextUtils.equals(field.getName(), "mMonthPicker")) {
Method m = field.getType().getDeclaredMethod("setRange", int.class, int.class, String[].class);
m.setAccessible(true);
String[] s = new String[] {"01","02","03","04","05","06","07","08","09","10","11","12"};
m.invoke(field.get(this), 1, 12, s);
break;
}
}
}
catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}

}

Android 版本 >= 3.0(只有构造函数)

public MyDatePicker(Context context, AttributeSet attrs) {
super(context, attrs);
Field[] fields = DatePicker.class.getDeclaredFields();
try {
String[] s = new String[] {"01","02","03","04","05","06","07","08","09","10","11","12"};
for (Field field : fields) {
field.setAccessible(true);
if (TextUtils.equals(field.getName(), "mMonthSpinner")) {
NumberPicker monthPicker = (NumberPicker) field.get(this);
monthPicker.setDisplayedValues(s);
}
if (TextUtils.equals(field.getName(), "mShortMonths")) {
field.set(this, s);
}
}
}
catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}

然后是样板 xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<my.pkg.MyDatePicker
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>

enter image description here

关于Android DatePicker 月份作为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10505691/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com