原创

点击EditText 弹出日期选择器DatePickerDialog

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://xuexuan.blog.csdn.net/article/details/53436123

转载请标明出处:http://blog.csdn.net/xx326664162/article/details/53436123 文章出自:薛瑄的博客

在一些需要注册的项目中我们可能需要用户填写生日等其他的日期格式的数据,这时候选择DatePickerDialog无疑是比较好的选择。在用户点击输入框或者输入框获得焦点的时候弹出来DatePickerDialog,用户点击设定按钮,将日期填写到输入框。

示例代码

<EditText  
     android:id="@+id/Birthday"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:layout_marginLeft="30dip"  
     android:layout_marginRight="30dip"  
     android:inputType="none"//不显示系统输入键盘  
     android:layout_weight="1" >  
</EditText>  

下面分别为EditText控件设置了两种监听事件,setOnClickListener()和setOnFocusChangeListener(),如果不设置setOnFocusChangeListener()需要点击两次EditText控件,第一次获得焦点,第二次点击才会触发setOnClickListener()。所以为了点击一次就能弹出日期选择框,需要设置setOnFocusChangeListener()

birthday = (EditText)findViewById(R.id.Birthday);  
birthday.setInputType(InputType.TYPE_NULL); //不显示系统输入键盘</span>  
birthday.setOnFocusChangeListener(new View.OnFocusChangeListener() {  

       @Override  
       public void onFocusChange(View v, boolean hasFocus) {  
            // TODO Auto-generated method stub  
           if(hasFocus){  
               showDatePickerDialog(); 
           }  
        }  
 });  

birthday.setOnClickListener(new View.OnClickListener() {  

     @Override  
     public void onClick(View v) {  
         // TODO Auto-generated method stub  
              showDatePickerDialog();
     }  
});  


     /**
     * 展示日期选择对话框
     */
    private void showDatePickerDialog() {
         Calendar c = Calendar.getInstance(); 
        new DatePickerDialog(RecognizeRecordActivity.this, new DatePickerDialog.OnDateSetListener() {

            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                // TODO Auto-generated method stub
                birthday.setText(year+"/"+(monthOfYear+1)+"/"+dayOfMonth);  
            }
        }, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)).show();

    }

防止EditText控件自动聚焦

为了防止,进入界面EditText控件自动聚焦,导致弹出日期选择器,需要在EditText控件所在的LinearLayout中添加如下代码:

android:focusable="true"  
android:focusableInTouchMode="true" 

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

方法三

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的设置还是要让他显示滴
   }

  }});

参考:
android 点击EditText 弹出日期选择器DatePickerDialog
Android手机开发:EditText+DatePicker带日期选择器的编辑框
关于android:focusable属性

关注我的公众号,轻松了解和学习更多技术
这里写图片描述

文章最后发布于: 2016-12-02 16:29:29
展开阅读全文
0 个人打赏

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 代码科技 设计师: Amelia_0503

分享到微信朋友圈

×

扫一扫,手机浏览