DatePickerDialog的月份为英文转成数字

在项目中,发现使用日期选择器的时候,不同手机系统日期选择框显示的日期不同,有的是中文的,有的是英文!之前以为是系统语言的问题,后面发现其实不是,是Android的日期选择框的bug。

一、现附上效果图,图片的黑白,只是主题不同而已

  


二、现在给出将月份都转换成数字的方法:

1、首先提供两个链接,帮助理解

(1)将日期选择框的年月日进行排序           http://blog.csdn.net/lintcgirl/article/details/50476684

(2)将日期选择框的月份进行值范围设置   http://blog.csdn.net/jb521125/article/details/17042083


注:1、排序年月日,是防止在获取月份的NumberPicker不会出现数组越界异常,因为不同手机他的排序是不同的

2、使用Locale.CHINA并不能解决英文的问题

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
Calendar c = Calendar.getInstance(Locale.CHINA);

2、写一个NewDatePicker类继承DatePickerDialog

import android.app.DatePickerDialog;
import android.content.Context;
import android.os.Bundle;
import android.view.ViewGroup;
import android.widget.DatePicker;
import android.widget.LinearLayout;
import android.widget.NumberPicker;

/**
 * 重写DatePickerDialog
 * @author Administrator
 *		将不同系统月份英文修改为数字
 */
public class NewDatePicker extends DatePickerDialog{
	/**
	 * 月份的取值
	 */
	private String[] mDisplayMonths = {"1", "2", "3","4", "5", "6","7", "8", "9","10", "11", "12"};
	
	/**
	 * 构造方法
	 * @param context
	 * @param callBack
	 * @param year
	 * @param monthOfYear
	 * @param dayOfMonth
	 */
	public NewDatePicker(Context context, OnDateSetListener callBack, int year,
			int monthOfYear, int dayOfMonth) {
		super(context, callBack, year, monthOfYear, dayOfMonth);
		// TODO Auto-generated constructor stub
	}
	public NewDatePicker(Context context, int theme,
			OnDateSetListener callBack, int year, int monthOfYear,
			int dayOfMonth) {
		super(context, theme, callBack, year, monthOfYear, dayOfMonth);
		// TODO Auto-generated constructor stub
	}

	/**
	 * 重新排序 年月日(英文会出现 月 日 年的情况,所以需要排序)
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		LinearLayout mSpinners = (LinearLayout) findViewById(getContext().getResources().getIdentifier("android:id/pickers", null, null));  
        if (mSpinners != null) {
        	NumberPicker mYearSpinner = (NumberPicker) findViewById(getContext().getResources().getIdentifier("android:id/year", null, null));
            NumberPicker mMonthSpinner = (NumberPicker) findViewById(getContext().getResources().getIdentifier("android:id/month", null, null));  
            NumberPicker mDaySpinner = (NumberPicker)findViewById(getContext().getResources().getIdentifier("android:id/day", null, null));
            mSpinners.removeAllViews();  
            if (mYearSpinner != null) {  
                mSpinners.addView(mYearSpinner);  
            } 
            if (mMonthSpinner != null) {  
                mSpinners.addView(mMonthSpinner);  
            } 
            if (mDaySpinner != null) {  
                mSpinners.addView(mDaySpinner);  
            } 
        }   
	}
	
	/**
	 * 有了年月日的正常顺序,下面的代码就不会出现数组越界异常
	 */
	@Override
	public void onDateChanged(DatePicker view, int year, int month, int day) {
		// TODO Auto-generated method stub
		super.onDateChanged(view, year, month, day);
		setTitle(year+"年 "+(month+1)+"月 "+day+"日");
		 //关键行
        ((NumberPicker)((ViewGroup)((ViewGroup)view.getChildAt(0)).getChildAt(0)).getChildAt(1)).setDisplayedValues(mDisplayMonths);
	}
}

3、上面只是设置了滑动的动态变换,我们在使用的时候要进行初始设置

package com.yuehe.car.view;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.DatePicker;
import android.widget.NumberPicker;
import android.widget.TextView;

public class DatePickInput extends TextView {
	/**
	 * 日期框
	 */
	private NewDatePicker mDialog;
	private Context context;
	/**
	 * 月份的取值
	 */
	private String[] mDisplayMonths = {"1", "2", "3","4", "5", "6","7", "8", "9","10", "11", "12"};
	
	public DatePickInput(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		this.context = context;
	}

	public DatePickInput(Context context, AttributeSet attrs) {
		super(context, attrs);
		this.context = context;
	}

	public DatePickInput(Context context) {
		super(context);
		this.context = context;
	}

	@Override
	protected void onFinishInflate() {
		if (isInEditMode()) {
			return;
		}
		setFocusable(false);
		final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
		final Calendar c = Calendar.getInstance(Locale.CHINA);
		
		setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				Date date = new Date();
				try {
					date = dateFormat.parse(getText().toString());
				}
				catch (ParseException e) {
				}
				c.setTime(date);
				int year = c.get(Calendar.YEAR);
				int month = c.get(Calendar.MONTH);
				int day = c.get(Calendar.DAY_OF_MONTH);
				mDialog = new NewDatePicker(getContext(),
						AlertDialog.THEME_HOLO_LIGHT,null,year,month,day);
				mDialog.setTitle(year+"年 "+(month+1)+"月 "+day+"日");
				mDialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
		                          DatePicker datePicker = mDialog.getDatePicker();
		                          int year = datePicker.getYear();  
		                          int month = datePicker.getMonth();  
		                          int day = datePicker.getDayOfMonth(); 
						
		                          c.set(year, month, day);
		                          Date date = c.getTime();
		                   
		                          Date curDate = new Date(System.currentTimeMillis());//获取当前时间    
		                          setText(dateFormat.format(c.getTime()));
					}
				});
				mDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消",new DialogInterface.OnClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						setText("");
					}
				});
				mDialog.show();
				/**
				 * 初始设置月份
				 */
				DatePicker dp = mDialog.getDatePicker();
				if (dp != null) {
				     ((NumberPicker)((ViewGroup)((ViewGroup)dp.getChildAt(0)).getChildAt(0)).getChildAt(1)).setDisplayedValues(mDisplayMonths);
				}
			}
		});
	}
}


 
4、使用,只需要在配置文件中使用自定义的TextView( 
DatePickInput)就可以了,一点击就会弹出日期选择框 

注:这里只是简单怎么使用,使用的时候还是根据你界面来直接使用就可以了

                  <你的包的路径.DatePickInput
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_gravity="center_vertical|center_horizontal"
                        android:layout_marginRight="20dp"
                        android:background="@color/white"
                        android:gravity="right|center_vertical"
                        android:hint="请选择日期"
                        android:inputType="datetime"
                        android:focusable="false"
                        android:maxLength="50"
                        android:singleLine="true"
                        android:textColorHint="@color/hint" />




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值