今天我们来学习一下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学习的一些知识,如有不恰当或者遗漏的地方,请多多指教。