Android EditText使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a13069730106/article/details/52250320

前言

对于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的其它用法就先介绍到这里.如有更好的其它方式使用方式,请留言.

猜你喜欢

转载自blog.csdn.net/a13069730106/article/details/52250320