Вопрос по android – Android DatePicker месяц как целое число

1

У меня простой вопрос, но после некоторого поиска я так и не смог найти ответ. Можно ли в DatePicker изменить месяц, который будет отображаться как целое число, а не строка? .Eg: {1,2,3 ..} not {jan, feb, mar ...}

EDIT:

Хотя решение @ kaneda, похоже, работает, в Android 3.0, по крайней мере, методы и атрибуты не совпадают. Код, который я использую, таков:

<code>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();
       }
    }
</code>

EDIT 2:

Лучшее решение - создать пользовательский DatePicker (следуя первому совету @kaneda), всегда будет работать без проблем совместимости и не переходить на рефлексию.

Использовалdate_picker.xml от android и DatePicker.java, опубликованных @kaneda. Кроме того, я использовал собственный NumberPicker (потому что тот, который использует виджет DatePicker, является внутренним для Android). Для виджета NumberPicker я следовал этомуссылка на сайт.

В CustomDatePicker я прокомментировал функциюgetShortMonths() и установите диапазон месяцев какmMonthPicker.setRange(1, NUMBER_OF_MONTHS);.

TKS для вашего ответа. я создал свой собственный сборщик дат Ruban
У вас есть answer.can u, пожалуйста, пришлите мне исходный код для выбора даты, который показывает месяцы в целых числах. Пожалуйста, отправьте исходный код на [email protected] .else пост как ответ ниже Ruban
@ Рубан, у меня его больше нет, как это было для моей работы, и я сменил работу. Тем не менее, вы должны быть в состоянии реализовать это на основе ответа и комментариев. marbarfa

Ваш Ответ

1   ответ
3

я думаю, что это будет наиболее правильным и простым для вас, если вы создадите свой собственныйDatePicker создав свой собственный макет, поэтому я предлагаю вам взглянуть на его исходный код только для справки:

Исходный код Android

ил

Во

Это необычный способ. Ужасно, вы могли бы сделать это:

Версия Android <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>

Решение отлично работает, но мне пришлось немного изменить конструктор, чтобы он работал в моей среде. Атрибут month - это mMonthSpinner (я использую android 3.0), а метод NumberPicker - setDisplayedValues. Я редактировал вопрос. marbarfa
Отлично !, большое спасибо! Я думал, что нужно было разработать свой собственный DatePicker. marbarfa
@ marbarfa Я рад, что мой ответ может помочь вам в пути. На самом деле, если вы используете Android 3.0 (следовательно, Api level 11), это еще проще, потому что Android SDK дает вам доступ кNumberPicker учебный класс. Я обновил свой ответ. Спасибо за замечание! Удачи kaneda

Похожие вопросы