Android 初学三 之 EditText

今天我们来学习一下EditText这个,常用的控件。我们首先看一看 EditText.Class。打开文件,可以看到如下图所示:
在这里插入图片描述
在Android中,EditText是android应用中的标准条目窗口小部件。它是TextView的覆盖层,该覆盖层将自身配置为可编辑的。EditText是TextView的子类,具有文本编辑操作。我们经常在应用程序中使用EditText来提供输入或文本字段,尤其是在表单中。EditText最简单的示例是“登录”或“登录”表单。
Android Studio中的EditText重要说明: EditText只是 TextView的j简单扩展 。EditText继承 TextView的所有属性。

1、EditText常用属性

具体的更常用的就不在这里介绍:有兴趣可以去看看这篇博文
XML语言的配置如下:

  <EditText
        android:id="@+id/EidtText_1"
        android:layout_below="@id/EidtText_0"
        android:layout_marginTop="10dp"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:hint="密码"<!--在没有输入的条件下Edittext中显示的内容-->
        android:inputType="textPassword" <!--显示要输入的数据类型,我这里设置为密码,输入进去的字符就如同密码一样看不见-->
        android:drawableLeft="@mipmap/password" <!--显示所需要的图片,这里是插入左边-->
        android:background="@drawable/edittext_stroke"<!--给EditText设置背景-->
        android:drawablePadding="10dp"> <!--设置内边距-->
        android:editable="true" <!--设置是否允许修改EditText的内容,已经被弃用-->
    </EditText>

显示效果如图所示:
在这里插入图片描述
常用来修改的就是android:inputType属性。输入属性有许多种,以下列举了一些输入属性:


属性作用
android:inputType=“none”没有任何限制
android:inputType=“text”文本
android:inputType=“textCapCharacters”字母大写
android:inputType=“textCapWords”首字母大写
android:inputType=“textCapSentences”仅第一个字母大写
android:inputType=“textAutoCorrect”自动选择
android:inputType=“textAutoComplete”自动完成
android:inputType=“textMultiLine”多行输入
android:inputType=“textImeMultiLine”输入法多行(如果支持)
android:inputType=“textNoSuggestions”不提示
android:inputType=“textUri”网址
android:inputType=“textEmailAddress”电子邮件地址
android:inputType=“textEmailSubject”邮件主题
android:inputType=“textShortMessage”短信息
android:inputType=“textLongMessage”长信息
android:inputType=“textPersonName”人名
android:inputType=“textPostalAddress”地址
android:inputType=“textPassword”密码
android:inputType=“textVisiblePassword”可见密码
android:inputType=“textWebEditText”作为网页表单的文本
android:inputType=“textFilter”文本筛选过滤
android:inputType=“textPhonetic”拼音输入
android:inputType=“number”数字
android:inputType=“numberSigned”带符号数字格式
android:inputType=“numberDecimal”带小数点的浮点格式
android:inputType=“phone”拨号键盘
android:inputType=“datetime”时间日期
android:inputType=“date”日期键盘
android:inputType=“time”时间键盘

2、Edittext显示密码

通常我们都会采用EditText作为登录界面的输入框,那我们经常在登录界面的时候可以看到登录的时候有显示密码,隐藏密码。
在我们做密码输入框之前我们需要知道如何显示和隐藏密码:一下给出两种途径(建议使用方法一)。

//显示密码:
//方法一:
 editTextpassword.setTransformationMethod(PasswordTransformationMethod.getInstance());
// 方法二:
 editTextpassword.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
 //隐藏密码:
//方法一:
editTextpassword.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
// 方法二:
editTextpassword.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD);

其实,只知道显示和隐藏密码是没有用的,需要知道在哪里监听显示和隐藏。很多人都会选择EditText+Button来显示和隐藏密码。其实我们可以给EditText添加一个Touch监听事件就可以做到。即通过你触摸位置的坐标是不是在drawable上面就可以判定(这里只是显示和隐藏密码,如果需要自己删除的话,也是类似的)

		boolen Flag=true;
        editTextpassword.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                switch (motionEvent.getAction()) {
                    case MotionEvent.ACTION_UP://每一次当触摸松开的时候改变密码是否显示出来。也可以选择按下的时候
                        Drawable drawableRight = editTextpassword.getCompoundDrawables()[2];
                        if (drawableRight != null && motionEvent.getRawX() >= (editTextpassword.getRight() - drawableRight.getBounds().width())) {
                            if (Flag) {
                                Flag = false;
                                editTextpassword.setTransformationMethod(PasswordTransformationMethod.getInstance());
                                //editTextpassword.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
                            } else {
                                Flag = true;
                                editTextpassword.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                                // editTextpassword.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD);
                            }
                        }
                    break;
                }
                return false;
            }
        });

显示效果如图所示:
在这里插入图片描述

EditText监听内容的改变

EditText对于内容监听的改变有几个常用监听事件:
一个是KeyListener(),
一个是TextWatcher(),
还有在外部添加一个Button的点击事件,用于检测EditText中的内容是不是符合我们的要求(不做演示)。
相对于而言TextWatcher()比KeyListener()更方便与实用一点,因为KeyListener()只监听键盘的输入,而TextWatcher()监听内容的更改。因为EditText不仅仅通过键盘输入文字。

        editTextpassword.addTextChangedListener(new TextWatcher() {
            //CharSequence s:文本改变之前的内容
            //int start : 被替换文本区域起点位置
            //int count:将被替换的文本区域字符数目
            //int after:替换后的文本字符数目
            @Override
            public void beforeTextChanged(CharSequence charSequence, int s, int c, int a) {

            }

            //CharSequence s:文本改变之后的内容
            //int start : 被替换文本区域起点位置,setText时是替换所有内容,此时数值为0
            //int before:被替换之前的文本区域字符数目
            //int count:替换后的文本字符数目
            @Override
            public void onTextChanged(CharSequence charSequence, int s, int b, int c) {
                    if(charSequence.length()>6){
                        editTextpassword.setError("字符串长度应小于6");
                    }
            }
            //这里是当内容更改后调用,可以从这里从新修改内容,如果想修改的话,会从新执行这一过程
            @Override
            public void afterTextChanged(Editable editable) {
                
            }
        });

显示效果如图所示:
在这里插入图片描述

输入提示

一般来说,EditText都会设置hint属性提示用户登录,但是用户开始输入第一个字符时。提示内容就会消失。因此,我们可以利用:**android.support.design.widget.TextInputLayout(浮动标签)**来替代普通的hint。
显示效果如图所示:(此时hint的内容浮于顶部)
在这里插入图片描述
先介绍一下:
TextInputLayout是设计支持库中引入的新元素,用于在EditText中显示浮动标签 。要在EditText中显示浮动标签,TextInputLayout需要包装EditText。我们还可以使用setError()和setErrorEnabled()方法将错误消息显示给EditText。它采用分配给EditText的hint的值并将其显示为浮动标签。Android Design支持库引入了一些重要的新小部件,这些小部件可帮助我们创建一致的UI。

代码如下:

 <android.support.design.widget.TextInputLayout
       android:id="@+id/TextInputLay_0"
        android:layout_below="@id/EidtText_0"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <EditText
            android:id="@+id/EidtText_1"
            android:layout_marginTop="10dp"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:inputType="textPassword"
            android:drawableLeft="@mipmap/password"
            android:drawableRight="@drawable/see"
            android:hint="password"
            android:background="@drawable/edittext_stroke"
            android:drawablePadding="10dp">
        </EditText>
    </android.support.design.widget.TextInputLayout>

=============================================================================================
以上是本人对于EditText学习的一些知识,如有不恰当或者遗漏的地方,请多多指教。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值