发新帖

[Android资源] EditText+DatePicker带日期选择器的编辑框

大神级别 2016-9-18 334


在Android开发中,我们经常会遇到选择日期的文本框,点击后用来选择日期时间,这个选择日期的实现方式有很多种,本文介绍一种用EditText和DatePicker制作的选择日期的编辑框,下面我们直接看待吗如何实现.
1. 声明EditText变量,并关联到相应控件上
private EditText sellStartTime;
private EditText sellEndTime;
sellStartTime = (EditText)findViewById(R.id.editSellStartTime);
sellEndTime = (EditText)findViewById(R.id.editSellEndTime);
2. 日期选择器函数
private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        mYear = year;
        String mm;
        String dd;
         
        if (monthOfYear <= 9) {
            mMonth = monthOfYear + 1;
            mm = "0" + mMonth;
        }
        else {
            mMonth = monthOfYear + 1;
            mm = String.valueOf(mMonth);
        }
         
        if (dayOfMonth <= 9) {
            mDay = dayOfMonth;
            dd = "0" + mDay;
        }
        else{
            mDay = dayOfMonth;
            dd = String.valueOf(mDay);
        }
         
        mDay = dayOfMonth;
         
        if (timeFlag == 0) {
            sellStartTime.setText(String.valueOf(mYear) + "-" + mm + "-" + dd);
        }
        else {
            sellEndTime.setText(String.valueOf(mYear) + "-" + mm + "-" + dd);
        }
    }
};
    
protected Dialog onCreateDialog(int id) {
    switch (id) {  
        case 0:
            return new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay);
        case 1:
            return new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay);
    }
    return null;
}
 
// 隐藏手机键盘
private void hideIM(View edt){
    try {
        InputMethodManager im = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
        IBinder windowToken = edt.getWindowToken();
         
        if (windowToken != null) {
            im.hideSoftInputFromWindow(windowToken, 0);
        }
    }
    catch (Exception e) {
         
    }
}
3. 注册监听器,当EditText获得焦点时,或者被点击时,打开日期选择器
sellStartTime.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        timeFlag = 0;
        showDialog(0);
    }
});
 
sellEndTime.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        timeFlag = 1;
        showDialog(1);
    }          
});
 
sellStartTime.setOnFocusChangeListener(new OnFocusChangeListener() {
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus == true) {
            timeFlag = 0;
            hideIM(v);
            showDialog(0); 
        }
    }
});
 
sellEndTime.setOnFocusChangeListener(new OnFocusChangeListener() {
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus == true) {
            timeFlag = 1;
            hideIM(v);
            showDialog(1); 
        }
    }
});
4. 在包含EditText的LinearLayout中,添加语句
android:focusable="true" android:focusableInTouchMode="true"
这句话是为了防止EditText自动获取焦点,触发日期选择器。


最新回复 (0)
登录后再回复
返回