点击EditText 弹出日期选择器DatePickerDialog

本文介绍如何在Android应用中使用DatePickerDialog增强EditText控件的日期输入功能,包括监听事件设置、防止自动聚焦及软键盘关闭的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                       

转载请标明出处:http://blog.youkuaiyun.com/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>  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

下面分别为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();    }
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

防止EditText控件自动聚焦

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

android:focusable="true"  android:focusableInTouchMode="true" 
  
  • 1
  • 2

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>
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

方法二:

强制隐藏Android输入法窗口

EditText edit=(EditText)findViewById(R.id.edit); InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);imm.hideSoftInputFromWindow(edit.getWindowToken(),0);
  
  • 1
  • 2
  • 3

方法三

EditText始终不弹出软件键盘

EditText edit=(EditText)findViewById(R.id.edit);edit.setInputType(InputType.TYPE_NULL);
  
  • 1
  • 2

屏蔽实体键盘

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) : "";        }    }   }); 
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

但是这样连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的设置还是要让他显示滴   }  }});
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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

 

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

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.youkuaiyun.com/jiangjunshow

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值