gpt4 book ai didi

android - 如何更改 DatePickerDialog 中 NumberPickers 的顺序

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

enter image description here

我想交换月份和日期(微调器)。我想将日期列 (Spinner) 发送到左侧,将月份列 (Spinner) 发送到中间。可能吗?

最佳答案

根据来源中的注释,这些 NumberPicker 的顺序s 由用户选择的系统范围的日期格式确定,取决于给定用户区域设置的最佳顺序的确定。没有可用的公共(public)方法可以轻松更改此设置。但是,无论如何,我已经找到了一种更改顺序的方法。

在以下示例中,我们获取 DatePickerDialog 的 ID。的NumberPicker s 来自系统资源。我通过检查 the layout file 找到了这些标识符的名称对于DatePicker类(class)。

获得 ID 后,我们会找到 NumberPicker s 和他们的 parent LinearLayout在对话框中,就像我们在任何其他 View 中一样.然后,我们可以从布局中删除微调器,并以所需的任何顺序将它们添加回来。 DatePicker类使用相同的方法对微调器进行重新排序,下面的一些代码是从其源代码中提取的。

添加回每个微调器后,我们需要调用 setImeOptions()用它和它的新索引按顺序排列。这将纠正微调器输入的焦点链和键盘反馈 TextView s。

这一切都变得有点笨拙,所以我用几种方法把它包起来。您只需调用orderDate()显示对话框后的方法,带有 char指示所需日期顺序的数组。例如:

DatePickerDialog dialog = new DatePickerDialog(...);
...
dialog.show();

orderDate(dialog, new char[]{'d', 'm', 'y'});

我们保留一个 int微调器数量的常量,简化了从源代码中提取的一些代码:
private static final int SPINNER_COUNT = 3;

private void orderDate(DatePickerDialog dialog, char[] ymdOrder) {
if(!dialog.isShowing()) {
throw new IllegalStateException("Dialog must be showing");
}

final int idYear = Resources.getSystem().getIdentifier("year", "id", "android");
final int idMonth = Resources.getSystem().getIdentifier("month", "id", "android");
final int idDay = Resources.getSystem().getIdentifier("day", "id", "android");
final int idLayout = Resources.getSystem().getIdentifier("pickers", "id", "android");

final NumberPicker spinnerYear = (NumberPicker) dialog.findViewById(idYear);
final NumberPicker spinnerMonth = (NumberPicker) dialog.findViewById(idMonth);
final NumberPicker spinnerDay = (NumberPicker) dialog.findViewById(idDay);
final LinearLayout layout = (LinearLayout) dialog.findViewById(idLayout);

layout.removeAllViews();
for (int i = 0; i < SPINNER_COUNT; i++) {
switch (ymdOrder[i]) {
case 'y':
layout.addView(spinnerYear);
setImeOptions(spinnerYear, i);
break;
case 'm':
layout.addView(spinnerMonth);
setImeOptions(spinnerMonth, i);
break;
case 'd':
layout.addView(spinnerDay);
setImeOptions(spinnerDay, i);
break;
default:
throw new IllegalArgumentException("Invalid char[] ymdOrder");
}
}
}

private void setImeOptions(NumberPicker spinner, int spinnerIndex) {
final int imeOptions;
if (spinnerIndex < SPINNER_COUNT - 1) {
imeOptions = EditorInfo.IME_ACTION_NEXT;
}
else {
imeOptions = EditorInfo.IME_ACTION_DONE;
}
int idPickerInput = Resources.getSystem().getIdentifier("numberpicker_input", "id", "android");
TextView input = (TextView) spinner.findViewById(idPickerInput);
input.setImeOptions(imeOptions);
}

关于android - 如何更改 DatePickerDialog 中 NumberPickers 的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33624824/

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