• Android开发UI之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;
      }
     }

  • 相关阅读:
    ETL讲解(很详细!!!)
    必须掌握的30种SQL语句优化
    亿级Web系统搭建——单机到分布式集群
    运行第一个容器
    Docker 架构详解
    容器 What, Why, How
    Docker 组件如何协作?
    部署 DevStack
    通过例子学习 Keystone
    创建 Image
  • 原文地址:https://www.cnblogs.com/liyiran/p/4616205.html
Copyright © 2020-2023  润新知