Android手机开发:EditText+DatePicker带日期选择器的编辑框

 

 

1. 声明EditText变量,并关联到相应控件上

  1. private EditText sellStartTime;  
  2. private EditText sellEndTime;  

  1. sellStartTime = (EditText)findViewById(R.id.editSellStartTime);  
  2. sellEndTime = (EditText)findViewById(R.id.editSellEndTime);  


2. 日期选择器函数

  1. private DatePickerDialog.OnDateSetListener mDateSetListener =  
  2.             new DatePickerDialog.OnDateSetListener() {  
  3.                 public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {  
  4.                     mYear = year;  
  5.                     String mm;  
  6.                     String dd;  
  7.                     if(monthOfYear<=9)  
  8.                     {  
  9.                         mMonth = monthOfYear+1;  
  10.                         mm="0"+mMonth;  
  11.                     }  
  12.                     else{  
  13.                         mMonth = monthOfYear+1;  
  14.                         mm=String.valueOf(mMonth);  
  15.                         }  
  16.                     if(dayOfMonth<=9)  
  17.                     {  
  18.                         mDay = dayOfMonth;  
  19.                         dd="0"+mDay;  
  20.                     }  
  21.                     else{  
  22.                         mDay = dayOfMonth;  
  23.                         dd=String.valueOf(mDay);  
  24.                         }  
  25.                     mDay = dayOfMonth;  
  26.                     if(timeFlag == 0) {  
  27.                         sellStartTime.setText(String.valueOf(mYear)+"-"+mm+"-"+dd);  
  28.                     }else {  
  29.                         sellEndTime.setText(String.valueOf(mYear)+"-"+mm+"-"+dd);  
  30.                     }  
  31.                 }             
  32.             };  
  33.      
  34.     protected Dialog onCreateDialog(int id) {  
  35.         switch (id) {     
  36.         case 0:  
  37.             return new DatePickerDialog(this,  
  38.                     mDateSetListener,  
  39.                     mYear, mMonth, mDay);  
  40.         case 1:  
  41.             return new DatePickerDialog(this,  
  42.                     mDateSetListener,  
  43.                     mYear, mMonth, mDay);  
  44.         }  
  45.         return null;  
  46.     }  
  47.       
  48.     // 隐藏手机键盘   
  49.     private void hideIM(View edt){  
  50.         try {  
  51.              InputMethodManager im = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);  
  52.              IBinder  windowToken = edt.getWindowToken();  
  53.              if(windowToken != null) {  
  54.                  im.hideSoftInputFromWindow(windowToken, 0);  
  55.              }  
  56.          } catch (Exception e) {  
  57.              
  58.          }  
  59.      }  


3. 注册监听器,当EditText获得焦点时,或者被点击时,打开日期选择器

  1.               sellStartTime.setOnClickListener(new OnClickListener(){  
  2.                public void onClick(View v) {  
  3.                 timeFlag = 0;  
  4.                 showDialog(0);  
  5.     }  
  6.        });  
  7. sellEndTime.setOnClickListener(new OnClickListener() {  
  8.     public void onClick(View v) {  
  9.         timeFlag = 1;  
  10.         showDialog(1);  
  11.     }             
  12. });  
  13. sellStartTime.setOnFocusChangeListener(new OnFocusChangeListener() {  
  14.     public void onFocusChange(View v, boolean hasFocus) {  
  15.         if (hasFocus == true) {  
  16.             timeFlag = 0;  
  17.             hideIM(v);  
  18.             showDialog(0);    
  19.         }  
  20.     }  
  21. });  
  22.   
  23. sellEndTime.setOnFocusChangeListener(new OnFocusChangeListener() {  
  24.     public void onFocusChange(View v, boolean hasFocus) {  
  25.         if (hasFocus == true) {  
  26.             timeFlag = 1;  
  27.             hideIM(v);  
  28.             showDialog(1);    
  29.         }  
  30.     }  
  31. });  


4. 在包含EditText的LinearLayout中,添加语句

  1. android:focusable="true"  android:focusableInTouchMode="true"  


这句话,是为了防止EditText自动获取焦点,触发日期选择器。

EditText如何关闭软键盘


 方法一:
在AndroidMainfest.xml中选择哪个activity,设置windowSoftInputMode属性为adjustUnspecified|stateHidden
例如:<activity android:name=".Main"
                  android:label="@string/app_name"
                  android:windowSoftInputMode="adjustUnspecified|stateHidden"
                  android:configChanges="orientation|keyboardHidden">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
方法二:
强制隐藏Android输入法窗口
例如:EditText edit=(EditText)findViewById(R.id.edit); 
           InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
           imm.hideSoftInputFromWindow(edit.getWindowToken(),0);

2.EditText始终不弹出软件键盘
例:EditText edit=(EditText)findViewById(R.id.edit);
       edit.setInputType(InputType.TYPE_NULL);

 

 

还有一个问题是怎样才能不让实体键盘也输入呢,解决方法

Android用代码实现EditText不可编辑

 

editText.setFilters(new InputFilter[] { new InputFilter() {  

    @Override  

  public CharSequence filter(CharSequence source, int start,  

      int end, Spanned dest, int dstart, int dend) {  

       return source.length() < 1 ? dest.subSequence(dstart, dend) : "";  

    }  

}   

}); 但是这样连DatePicker的设置也不能显示到EditText里了,改一改

//实现EditText不可编辑
  birthEdit.setFilters(new InputFilter[]{new InputFilter(){
   @Override
   public CharSequence filter(CharSequence source, int start, int end,
     Spanned dest, int dstart, int dend) {
    
    showDialog(HmConst.DIALOG_DATEPICKER);//不管按什么键都让DatePicker出现
    return source.length() == 1 ? "" : source;   //DatePicker的设置还是要让他显示滴
   }
   
  }});

 

 

 我的实验代码,可行

protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.register);

birthEdit =(EditText)findViewById(R.id.birthEdit);

makeDateEdit();

}

/**
  * 将EditText变成一个日期选择器
  */
 public void makeDateEdit(){
  //隐藏EditText键盘
  birthEdit.setInputType(InputType.TYPE_NULL);
  //点击显示DatePickerDialog
  birthEdit.setOnClickListener(new OnClickListener(){
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    showDialog(HmConst.DIALOG_DATEPICKER);
   }
  });
  
  //实现EditText不可编辑
  birthEdit.setFilters(new InputFilter[]{new InputFilter(){
   @Override
   public CharSequence filter(CharSequence source, int start, int end,
     Spanned dest, int dstart, int dend) {
    
    showDialog(HmConst.DIALOG_DATEPICKER);//不管按什么键都让DatePicker出现
    return source.length() == 1  ? "" : source; 
   }
   
  }});
  //屏蔽实体键盘delete键
  birthEdit.setOnKeyListener(new OnKeyListener(){
   @Override
   public boolean onKey(View v, int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub
     if(keyCode == KeyEvent.KEYCODE_DEL) {
      showDialog(HmConst.DIALOG_DATEPICKER);//delete键都让DatePicker出现
               return true;//返回真就会屏蔽delete键的原效果
           }
        return false;
   }
  });
  //设置时间选择器的监听器
  mDateSetListener =  new DatePickerDialog.OnDateSetListener() {  
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear,
              int dayOfMonth) {
             // TODO Auto-generated method stub
             
                    mYear = year;  
                    String mm;  
                    String dd;  
                    mMonth = monthOfYear+1; //因为month是从0开始计数的
                    if(mMonth<=9)  
                    {  
                        mm="0"+mMonth;  
                    }  
                    else{  
                        mm=String.valueOf(mMonth);  
                    }  
                   
                    mDay = dayOfMonth;
                    if(mDay<=9)  
                    {  
                        dd="0"+mDay;  
                    }  
                    else{  
                        dd=String.valueOf(mDay);  
                        }  
                    mDay = dayOfMonth;  
                    //将选择的时间显示在EditText上
                    birthEdit.setText(String.valueOf(mYear)+"-"+mm+"-"+dd);  
                      
               
            }            
        };  
 }
 
 
 
 @Override
 protected Dialog onCreateDialog(int id) {
  // TODO Auto-generated method stub
  switch(id){
  case HmConst.DIALOG_DATEPICKER:
   return new DatePickerDialog(this,mDateSetListener,2010,11,25);
  default:
   return null;
  }
 }
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值