博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android开发UI之EditText+DatePicker带日期选择器的编辑框
阅读量:5977 次
发布时间:2019-06-20

本文共 7136 字,大约阅读时间需要 23 分钟。

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

转载地址:http://iysox.baihongyu.com/

你可能感兴趣的文章
[转]十问 Linux 虚拟内存管理 (glibc)
查看>>
老司机带你深入浅出 Collection
查看>>
JavaScript属性操作
查看>>
查询系统-vba
查看>>
[译]Spring Session 与 Spring Security
查看>>
运行期优化
查看>>
安卓应用安全指南 4.4.3 创建/使用服务高级话题
查看>>
520戏精上身!纸短情长,一句顶一万句的花式告白语抱走不谢!
查看>>
[C#-SQLite] SQLite一些奇怪的问题
查看>>
在WinDBG中查看调用栈的命令
查看>>
2017中国互联网消费生态大数据报告
查看>>
canvas绘制正文形并填充-2
查看>>
C# WebApi+Task+WebSocket实战项目演练(四)
查看>>
第六章 加密与解密
查看>>
switch case 中定义变量
查看>>
使用jQuery.Ajax向ASP.NET MVC控制器Post数据
查看>>
系统调优,你所不知道的TIME_WAIT和CLOSE_WAIT
查看>>
精通 MEAN: MEAN 堆栈
查看>>
weblogic管理2 - 创建并启动一个managed server
查看>>
前缀、中缀、后缀表达式(转载)
查看>>