前言
对于android的开发人员来说,EditText应该已经很熟悉了.算的上是基础中的基础了.这里来讲讲除了其本使用外的一些其它的使用方式
显示错误信息
对于前端用户来说,校验用户的输入是一项基本的工作.这里当用户的输入现预期不符时,就需提示用户输入有错.这里方式有很多种.比如弹对话框的,有弹Toast的.以上方式虽然可启到提示用户的效果,但是用户体验欠佳.这里介绍一下EditText自带的错误提示方式吧.
先上一张效果图.
可以看到当用户名为空点击确认时,会提示用户名不可以为空.同时焦点会自动跳转到该输入框.这个用户的体验也很好,可以立刻知道是哪输入出现错误.
下面上代码.
@Override
public void onClick(View view) {
if (view.getId() == R.id.confirm) {
String nameStr = name.getText().toString();
if (Tools.notNull(nameStr) == false) {
name.setError(getResources().getString(R.string.name_null_error));
//以下代码用于重新获取焦点
name.setFocusable(true);
name.requestFocus();
}
}
}
Android EditText 与键盘交互
Android EditText 的几个属性中,有三个是与键盘交互的.分别是android:imeActionId,android:imeActionLabel,及android:imeOptions,下面就三个属性进行学习一下
android:imeOptions
在使用输入法时,键盘的右下角般都是回车,但是有的时候,确会变成前往,search等.这里是怎么实现的呢,其实也很简单,使用的就是imeOptions,支持的参数有16个,只这只列举常用的几个
参数 | 键盘显示 | 对应常量 | 默认效果 |
actionUnspecified | 未指定 | EditorInfo.IME_ACTION_UNSPECIFIED | 跳到一下个输入框 |
actionNone | 没有动作 | EditorInfo.IME_ACTION_NONE | 跳到一下个输入框 |
actionGo | 去往 | EditorInfo.IME_ACTION_GO | 跳到一下个输入框 |
actionSearch | 搜索 | EditorInfo.IME_ACTION_SEARCH | 跳到一下个输入框 |
actionSend | 发送 | EditorInfo.IME_ACTION_SEND | 跳到一下个输入框 |
actionNext | 下一个 | EditorInfo.IME_ACTION_NEXT | 跳到一下个输入框 |
actionDone | 完成 | EditorInfo.IME_ACTION_DONE | 键盘推出 |
不过以上参数不同的输入法可能会有不同的相应.比如actionDone,有的显示完成,有的显示明是一个对勾的icon
由于大部分imeOptions的默认效果都只是跳到下一个输入框或者退出,不能实现一些特定的操作.需要在代码写一定的逻辑来实现更好的效果.
name.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
LogUtil.debug("完成按钮被按下了");
return true;
}
return false;
}
});
android:imeActionLabel and imeActionId
imeActionLable和imeActionId需要配套使用,这里放在一起介绍.
先来看看android:imeActionLabel
使用此属性可以控制右下确按钮的文字显示,比如使用如下代码
<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/user_name"
android:imeOptions="actionSend"
android:imeActionLabel="用户名"
android:imeActionId="1024"
android:inputType="text"
android:maxLines="1" />
效果如下
由于按钮大小的限制,这里建议android:imeActionLabel设置的字符数不要超过3个
但是由于配置android:imeActionLabel后,actionOption的值将被重写成actionUnspecified,这时在代码里获取的actionId的值将永远是0,为了能区别用户是否点击的回车键,需要再设置一个android:imeActionId属性.一般设成大于10就不会与现在的冲突.所以需要对代码进行一下修改
name.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) {
if (actionId == 1024) {
LogUtil.debug("测试按钮被按下了");
return true;
}
return false;
}
});
TextInputLayout
现在来介绍一下TextInputLayout,这个控件并不是用来输入的,而是配合EditText来使用的,可以使EditText拥有更好的显示效果,下面先看一下效果
注意圈起来的位置,当这个EditText获取到焦点时,里面的提示信息是自动的浮动到上面,且还有一定的动画效里,使用起来会给用户更好的体验.这里看一下代码
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/user_name"
android:imeActionId="1024"
android:imeActionLabel="测试"
android:inputType="text"
android:maxLines="1" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/password"
android:imeActionId="@+id/login"
android:imeActionLabel="结束"
android:inputType="textPassword"
android:maxLines="1" />
</android.support.design.widget.TextInputLayout>
其中浮动的内容为EditText的hint属性.对于前端人员也省去了画Lable的时间.
结语
关于EditText的其它用法就先介绍到这里.如有更好的其它方式使用方式,请留言.