Android 在DatePickerDialog中以数字格式而不是字母格式显示月份字段

Android 在DatePickerDialog中以数字格式而不是字母格式显示月份字段,android,datepicker,Android,Datepicker,下面的图片显示了我在android应用程序中的当前日期选择器,但是我想将所有月份显示为01、02、03…12,而不是1月、2月、3月。。。十二月 任何帮助都将不胜感激 您可以使用数字选择器来实现这一点: 1)创建字符串数组: String mValues[] = { "01","02","03","04","05","06","07","08","09","10","11","12"}; private void setNubmerPicker(NumberPicker nubmerPicke

下面的图片显示了我在android应用程序中的当前日期选择器,但是我想将所有月份显示为01、02、03…12,而不是1月、2月、3月。。。十二月

任何帮助都将不胜感激


您可以使用数字选择器来实现这一点:

1)创建字符串数组:

String mValues[] = { "01","02","03","04","05","06","07","08","09","10","11","12"};
private void setNubmerPicker(NumberPicker nubmerPicker,String [] numbers ){
nubmerPicker.setMaxValue(numbers.length-1);
nubmerPicker.setMinValue(0);
nubmerPicker.setWrapSelectorWheel(true);
nubmerPicker.setDisplayedValues(numbers);
}
2)创建使用自定义值创建数字选择器的方法:

String mValues[] = { "01","02","03","04","05","06","07","08","09","10","11","12"};
private void setNubmerPicker(NumberPicker nubmerPicker,String [] numbers ){
nubmerPicker.setMaxValue(numbers.length-1);
nubmerPicker.setMinValue(0);
nubmerPicker.setWrapSelectorWheel(true);
nubmerPicker.setDisplayedValues(numbers);
}
3)使用自定义值调用数字选择器方法:

String mValues[] = { "01","02","03","04","05","06","07","08","09","10","11","12"};
private void setNubmerPicker(NumberPicker nubmerPicker,String [] numbers ){
nubmerPicker.setMaxValue(numbers.length-1);
nubmerPicker.setMinValue(0);
nubmerPicker.setWrapSelectorWheel(true);
nubmerPicker.setDisplayedValues(numbers);
}
setnumberpicker(yourNumberPicker,mValues)

数字选择器的优点:

  • 添加到API级别11中,因此您可以在所有设备上使用它
  • 你不需要打开一个对话框,它会让你的应用程序更简单(想象一下,你想下订单,以及打开对话框的每一个小细节),当然,如果你愿意,你每次都可以把你的号码选择器放在对话框中
  • 如果你使用我的答案,你可以在你的数据数组中使用Unicode字符(在我的例子中是-mValues),我认为这真的是一个很好的加法,几乎不费吹灰之力

您可以使用
NumberPicker
设计自己的
对话框
,但如果您仍然想使用
DatePickerDialog
,这应该可以:

DatePickerDialog mDatePicker = new DatePickerDialog(MainActivity.this, android.R.style.Theme_Holo_Light_Dialog, new DatePickerDialog.OnDateSetListener() {
    public void onDateSet(DatePicker view, int selectedyear, int selectedmonth, int selectedday) {
        // Stuff
    }
}, mYear, mMonth, mDayOfMonth) {

    final int month = getContext().getResources().getIdentifier("android:id/month", null, null);
    final String[] monthNumbers = new String[]{ "01","02","03","04","05","06","07","08","09","10","11","12"}

    @Override
    public void onDateChanged(@NonNull DatePicker view, int y, int m, int d) {
        super.onDateChanged(view, y, m, d);
        // Since DatePickerCalendarDelegate updates the month spinner too, we need to change months as numbers here also
        if(month != 0){
            NumberPicker monthPicker = findViewById(month);
            if(monthPicker != null){
                monthPicker.setDisplayedValues(monthNumbers);
            }
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        // Hide day spinner
        int day = getContext().getResources().getIdentifier("android:id/day", null, null);
        if(day != 0){
            NumberPicker dayPicker = findViewById(day);
            if(dayPicker != null){
                dayPicker.setVisibility(View.GONE);
            }
        }
        // Show months as Numbers
        if(month != 0){
            NumberPicker monthPicker = findViewById(month);
            if(monthPicker != null){
                monthPicker.setDisplayedValues(monthNumbers);
            }
        }
    }
};
mDatePicker.setTitle("Select Date");
mDatePicker.show();

我使用了@Dispew answer,但我将monthPicker设置为null,因此我更改了此选项:

final int month = getContext().getResources().getIdentifier("android:id/month", null, null);

// Show months as Numbers
        if(month != 0){
            NumberPicker monthPicker = findViewById(month);
            if(monthPicker != null){
                monthPicker.setDisplayedValues(monthNumbers);
            }
        }
为此:

NumberPicker monthPicker = mDatePicker.findViewById((Resources.getSystem().getIdentifier("month", "id", "android")));
    if (monthPicker != null){
        monthPicker.setDisplayedValues(monthNumbers);
    }
尝试使用以下方法: