Android Studio 设置EditText输入类型和内容长度 - MilkeZhang 的网络笔记

1、设置输入类型设置EditText输入类型主要有两种方法,一种是使用EditText的setInputType()方法,另一种是在布局文件中使用android:inputType属性来设置。(1)使用EditText的setInputType()方法设置输入类型: EditText editText; //输入类型为没有指定明确的类型的特殊内容类型 editText.se

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

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

MilkeZhang > 笔记列表

阅读:402  点赞:0   留言:0


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,则表示输入法打开 

编写于:2023/2/3 11:37:36
发布 IP 属地:

版权声明

本站内容均来自网络转载或网友提供,如有侵权请及时联系我们删除!本站不承担任何争议和法律责任!


艾金森

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




2022-10-29日记【家族户外聚会】初めての日記です发烧杂记-Day2朋友别哭2023/2/42022-10-12 Web开发记录【手机端页面分离基本完成】海灯节2023/2/3Be first2023/2/5 突然出现的想法2022/10/22 晴顾鸟 的日记 2023/1/17 9:16:3323/1/31---深海清吧2023/3/21 复盘2023年1月11日 星期三 天气:小雨又是一天2023/1/15 复盘20230117 黑洞贝果,肉桂卷和司康饼《关于对新型冠状病毒感染实施“乙类乙管”的总体方案》解读问答STM32 GPIO 驱动函数心之所向,比海更深Android Studio 开发串口功能遇到的坑【记录】这是我的第一篇笔记哦Android Studio 设置EditText输入类型和内容长度包菜粉条C++笔记关于行为理论的笔记08-05(822)工业设计 CMF是什么?我的网课速度 Nov.~Dec.今天是个值得记得的日子日推(二)肖八第八套选择题知识点Android Studio Imagebutton 图片大小设置每天三道算法题2023/2/18NOIP春测模拟赛抱灵寄如果你也有一个孩子投资回报率(ROI)