Android DatePicker month as integer

后端 未结 1 1840
自闭症患者
自闭症患者 2021-01-24 13:05

I have a simple question but after searching a while I couldn\'t find the answer yet. In a DatePicker, is it possible to change the month to be displayed as an integer not a str

相关标签:
1条回答
  • 2021-01-24 13:24

    For what concerns best practices I think it's the most correct and easier for you if you create your own custom DatePicker by creating your own layout, so I suggest you take a look at its source code just for reference:

    Android Source Code

    or

    Here

    That's the fancy way. The ugly way, you could do this:

    Android Version < 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 Version >= 3.0 (only the constructor)

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

    Then the boilerplate 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

    0 讨论(0)
提交回复
热议问题