Android Studio 设置EditText输入类型和内容长度


1、设置输入类型

设置EditText输入类型主要有两种方法,一种是使用EditText的setInputType()方法,另一种是在布局文件中使用android:inputType属性来设置。

(1)使用EditText的setInputType()方法设置输入类型:

    EditText editText;

    //输入类型为没有指定明确的类型的特殊内容类型
    editText.setInputType(InputType.TYPE_NULL);

    //输入类型为普通文本
    editText.setInputType(InputType.TYPE_CLASS_TEXT);

    //输入类型为数字文本
    editText.setInputType(InputType.TYPE_CLASS_NUMBER);

    //输入类型为电话号码
    editText.setInputType(InputType.TYPE_CLASS_PHONE);

    //输入类型为日期和时间
    editText.setInputType(InputType.TYPE_CLASS_DATETIME);

    //输入类型为{@link#TYPE_CLASS_DATETIME}的缺省变化值,允许输入日期和时间。
    editText.setInputType(InputType.TYPE_DATETIME_VARIATION_NORMAL);

    //输入类型为{@link#TYPE_CLASS_DATETIME}的缺省变化值,只允许输入一个日期。
    editText.setInputType(InputType.TYPE_DATETIME_VARIATION_DATE);

    //输入类型为{@link#TYPE_CLASS_DATETIME}的缺省变化值,只允许输入一个时间。
    editText.setInputType(InputType.TYPE_DATETIME_VARIATION_TIME);

    //输入类型为决定所给文本整体类的位掩码
    editText.setInputType(InputType.TYPE_MASK_CLASS);

    //输入类型为提供附加标志位选项的位掩码
    editText.setInputType(InputType.TYPE_MASK_FLAGS);

    //输入类型为决定基类内容变化的位掩码
    editText.setInputType(InputType.TYPE_MASK_VARIATION);

    //输入类型为小数数字,允许十进制小数点提供分数值。
    editText.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);
    //输入类型为数字是带符号的,允许在开头带正号或者负号
    editText.setInputType(InputType.TYPE_NUMBER_FLAG_SIGNED);

    //输入类型为{@link#TYPE_CLASS_NUMBER}的缺省变化值:为纯普通数字文本
    editText.setInputType(InputType.TYPE_NUMBER_VARIATION_NORMAL);

    //输入类型为{@link#TYPE_CLASS_NUMBER}的缺省变化值:为数字密码
    editText.setInputType(InputType.TYPE_NUMBER_VARIATION_PASSWORD);

    //输入类型为自动完成文本类型
    editText.setInputType(InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE);

    //输入类型为自动纠正文本类型
    editText.setInputType(InputType.TYPE_TEXT_FLAG_AUTO_CORRECT);

    //输入类型为所有字符大写
    editText.setInputType(InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS);

    //输入类型为每句的第一个字符大写
    editText.setInputType(InputType.TYPE_TEXT_FLAG_CAP_SENTENCES);

    //输入类型为每个单词的第一个字母大写
    editText.setInputType(InputType.TYPE_TEXT_FLAG_CAP_WORDS);

    //输入多行文本
    editText.setInputType(InputType.TYPE_TEXT_FLAG_IME_MULTI_LINE);

    //进行输入时,输入法无提示
    editText.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

    //输入一个短的,可能是非正式的消息,如即时消息或短信。
    editText.setInputType(InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE);

    //输入长内容,可能是正式的消息内容,比如电子邮件的主体
    editText.setInputType(InputType.TYPE_TEXT_VARIATION_LONG_MESSAGE);

    //输入文本以过滤列表等内容
    editText.setInputType(InputType.TYPE_TEXT_VARIATION_FILTER);

    //输入一个电子邮件地址
    editText.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);

    //输入电子邮件主题行
    editText.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_SUBJECT);

    //输入一个密码
    editText.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);

    //输入老式的普通文本
    editText.setInputType(InputType.TYPE_TEXT_VARIATION_NORMAL);

    //输入人名
    editText.setInputType(InputType.TYPE_TEXT_VARIATION_PERSON_NAME);

    //输入邮寄地址
    editText.setInputType(InputType.TYPE_TEXT_VARIATION_POSTAL_ADDRESS);

    //输入语音发音输入文本,如联系人拼音名称字段
    editText.setInputType(InputType.TYPE_TEXT_VARIATION_PHONETIC);

    //输入URI
    editText.setInputType(InputType.TYPE_TEXT_VARIATION_URI);

    //输入对用户可见的密码
    editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

    //输入网页表单中的文本
    editText.setInputType(InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT);

    //输入网页表单中的邮件地址
    editText.setInputType(InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS);

    //输入网页表单中的密码
    editText.setInputType(InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD);


简单的例子:

       /**
         * 第一个例子:对用户可见的密码字段
         */
        editText.setInputType(InputType.TYPE_CLASS_TEXT |
                InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

        /**
         * 第二个例子:具有自动大写的多行邮寄地址
         */
        editText.setInputType(InputType.TYPE_CLASS_TEXT |
                InputType.TYPE_TEXT_VARIATION_POSTAL_ADDRESS |
                InputType.TYPE_TEXT_FLAG_MULTI_LINE);

        /**
         * 第三个例子:一个时间字段
         */
        editText.setInputType(InputType.TYPE_CLASS_DATETIME |
                InputType.TYPE_DATETIME_VARIATION_TIME);


在本文的后续,将会附上Android源码中的InputType.java。

(2)在布局文件中使用android:inputType属性来设置:

//输入类型为没有指定明确的类型的特殊内容类型
android:inputType="none"

//输入类型为普通文本
android:inputType="text"

 //输入类型为数字文本
 android:inputType="number"

//输入类型为电话号码
 android:inputType=”phone”

//输入类型为日期和时间
 android:inputType=”datetime”

 //输入类型为{@link#TYPE_CLASS_DATETIME}的缺省变化值,只允许输入一个日期。
 android:inputType=”date”

 //输入类型为{@link#TYPE_CLASS_DATETIME}的缺省变化值,只允许输入一个时间。
 android:inputType=”time”

//输入类型为小数数字,允许十进制小数点提供分数值。
 android:inputType="numberDecimal"

//输入类型为数字是带符号的,允许在开头带正号或者负号
 android:inputType="numberSigned"

//输入类型为数字密码
 android:inputType="numberPassword"

//输入类型为自动完成文本类型
 android:inputType="textAutoComplete"

//输入类型为自动纠正文本类型
 android:inputType="textAutoCorrect"

//输入类型为所有字符大写
 android:inputType="textCapCharacters"

//输入类型为每句的第一个字符大写
 android:inputType="textCapSentences"

//输入类型为每个单词的第一个字母大写
 android:inputType="textCapWords"

//输入法多行文本
 android:inputType="textImeMultiLine"

//进行输入时,输入法无提示
 android:inputType="textNoSuggestions"

 //输入一个短的,可能是非正式的消息,如即时消息或短信。
 android:inputType="textShortMessage"

//输入长内容,可能是正式的消息内容,比如电子邮件的主体
 android:inputType="textLongMessage"

//输入文本以过滤列表等内容
 android:inputType="textFilter"

//输入一个电子邮件地址
 android:inputType="textEmailAddress"

//输入电子邮件主题行
 android:inputType="textEmailSubject"

//输入一个密码
 android:inputType="textPassword"

//输入对用户可见的密码
 android:inputType="textVisiblePassword"

//输入人的姓名
 android:inputType="textPersonName"

//输入邮寄地址
 android:inputType="textPostalAddress"

//输入语音发音输入文本,如联系人拼音名称字段
 android:inputType="textPhonetic"

//输入URI
 android:inputType="textUri"

//输入网页表单中的文本
 android:inputType="textWebEditText"

//输入网页表单中的邮件地址
 android:inputType="textWebEmailAddress"

//输入网页表单中的密码
 android:inputType="textWebPassword"


2、限制输入长度
通过maxLength
以下只允许输入5位数字:

<EditText
    android:id="@+id/et_dialog_freq"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:maxLength="5"
    android:inputType="number"/>


3、修改edittext的横线的颜色(激活状态和未激活状态两种颜色)
在style.xml或者theme.xml中添加:

    <style name="MyEditText" parent="Theme.AppCompat.Light">
        <item name="colorControlNormal">@color/grey</item>
        <item name="colorControlActivated">@color/centerColor</item>
    </style>


在xml文件中

 <EditText
	  ...
      android:theme="@style/MyEditText"/>		


4、使EditText失去焦点,edittext禁止弹出键盘
参考:https://blog.csdn.net/u011630575/article/details/50775639
有时候一进入一个页面, EditText默认就会自动获取焦点。弹出输入法框,用户体验很不好,

那么如何取消这个默认行为呢?

目前有更好的办法,第一种方法局限性很强,大家可以使用第二种方法


EditText et_username=(EditText)findViewById(R.id.et_username); 
EditText et_password=(EditText)findViewById(R.id.et_password); 
et_username.clearFouse();
et_password.clearFouse();


在其父控件下,添加如下的属性,就可以完美解决:

android:focusable="true"   (能够获取焦点)
android:focusableInTouchMode="true"   (通过点击获得焦点)


举例如下

 <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
         android:focusable="true" 
         android:focusableInTouchMode="true">   
        <EditText 
            android:id="@+id/et_enter_msg_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>    
        <Button 
            android:id="@+id/sent"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/send"/>
            
    </LinearLayout>


第二种方法:直接关闭输入法

private  void  closeInputMethod() {
     InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
     boolean  isOpen = imm.isActive();
     if  (isOpen) {
         // imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);//没有显示则显示
         imm.hideSoftInputFromWindow(mobile_topup_num.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
     }
}


调用这个方法体就行了,具体if语句里面的几个参数,我就借用一个网友的日志来写

1 、方法一(如果输入法在窗口上已经显示,则隐藏,反之则显示)
  
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.toggleSoftInput( 0 , InputMethodManager.HIDE_NOT_ALWAYS); 
  
2 、方法二(view为接受软键盘输入的视图,SHOW_FORCED表示强制显示)
  
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.showSoftInput(view,InputMethodManager.SHOW_FORCED); 
[java] view plaincopy
imm.hideSoftInputFromWindow(view.getWindowToken(),  0 );  //强制隐藏键盘 
 
3 、调用隐藏系统默认的输入法
  
((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(WidgetSearchActivity. this .getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);  (WidgetSearchActivity是当前的Activity) 
 
4 、获取输入法打开的状态
  
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
boolean  isOpen=imm.isActive(); //isOpen若返回true,则表示输入法打开 

艾金森

每一个童年的梦想都值得用青春去捍卫!




用户首页 用户信息 用户动态 用户日历 用户笔记 用户日记 用户心情 用户时间轴 心情地图 日记地图 笔记地图 时间轴地图 投票地图 习题地图 周末玩的很开心很想抽烟,好难受系统架构设计师论文《论虚拟现实技术的应用与发展》人抑郁的时候会干一些疯事,我开口就去约断联了仨个月的crush看电影。但是居然真被我约出来了(?????)很抑郁 大概真的缺人陪我世界上的事情变化好快啊,这个世界很大,但是有一些人拥有了足够的能量,全部用来破坏了2024年1月21日上班了家人们,距离周六还有 3 天"猫科动物在睡觉时很警惕"一定是西部菱斑响尾蛇污蔑的!2023-05-15日记【戒烟第一天】逢年过节的传统上网课ing2025-12-27 Web开发记录【UI细节优化与Bug处理】差生文具多sorry我要开地图炮了,但是!男的!究竟和女的是不是一个物种啊!交流起来未免也太费劲了!!!MosiS 的日记 2024/04/21 20:08:19相遇 | 格非 | epub+azw3 | 数字书屋朋友们,春节快乐,大吉大利,虎年吉祥,咱们节后再见了我喜欢女鬼熬夜后真的很难缓过来天堂旅行团 | 张嘉佳 | pdf+mobi+epub+azw3 | 数字书屋服务器IIS配置SSL证书注意事项one day 的日记 2022/2/11 9:06:36国庆快乐我希望每个人都能感受到,ta的生活欣欣向荣。二姨夫去世了,心梗。谁都接受不了,明明这么好的一个人,还这么年轻。前天是我第一次参加葬礼,坐在屋子里看着那口棺材,真是说话的力气都没有了,只会盯着他发呆流眼泪。前些天朋友圈里看到初中班主任发的父亲去世了,我还在评论节哀。真到了自己的时候才发现节哀二字是最最无力的。和表弟约了他下次回家我们一起去看望二姨。愿家人都健健康康,平安顺遂说什么我明天都得偷偷买雪糕吃数字书屋到底是人还是机器自发的马代,考虑考虑哇十二月的第一次《孙子兵法》第十四计 借尸还魂郁闷啊突然被通知要换办公地点了,最烦搬家找房子了好开心好开心!和妈妈和小猫一起看了乒乓混双决赛,莎头万岁!夺冠万岁!超级紧张刺激呀!这两天都看了些什么呢?看了下羽毛球双打、气步枪男子单人(见证盛李豪又一次夺冠!后知后觉超激动!),扫了下游泳、橄榄球、飞碟什么的……!打算有空去补一下全红婵跳水集锦!www开心呀~健康养生知识,成年人应该看点可靠的在这个快节奏的现代社会,人们的生活压力越来越大,对健康养生知识的需求也日益增加。然而,市面上关于健康养生的信息琳琅满目,真假难辨。作为成年人,我们有责任选择可靠的健康养生知识,为自己和家人的健康负责。定期体检,健康之本成年人要保持健康,首先要定期进行体检。通过体检,可以及时了解自己的健康状况,发现潜在的疾病风险,并采取相应的措施进行预防和治疗。定期体检是健康的基础,不容忽视。合理饮食,健康饮食成年人应该注重饮食的合理搭最近扒谱出品效率非常高,放半年前我都不敢奢望能把彩云追月顺下来天晓得我已经七八年没摸过钢琴了一天能混琴房三四个小时,专心练琴的时候情绪非常稳定突然我还以为网站被黑了呢联通客服真烦人,老打电话让人办流量套餐,烦死了,隔一段时间一个,隔一段时间一个,现在话术变了还说免费,md这算诈骗了吧,网上一搜一大堆被骗的2023-01-01日记【儿童节礼物】toutais 的日记 2022/2/22 11:01:172024-09-23 Web开发记录【数据优化与修复时间轴bug】悲伤就像什么一样呢?就像,就像...他总是想要想出个缘由,却睡着了他总是这样,每当带着负面的情绪时,想要理清楚的时候,不知不觉地就睡着了然后,他照常醒来,迎接糟糕的又一天2022.0630无趣无趣ktt以前说说是私域不好找,才用来放特价。现在好了,和坑钱网红没有任何区别了,随随便便tb就能找到的品加价50%卖,真就黑心。来了Но я просто двенадцатиклассник第二次事件了,张家界第一次,这一次是四川?第一次四个人,这一次三个人。敢不敢说一下共同的特征?共同的原因?究竟什么让他们集体去另一个世界?在这里写读书笔记,记录学习心得是可以的吗总感觉要读读经书,不然经常会被这种讨厌个别同事的心情影响开学第二周的学习