Android 中的 EditText

原创 2015年08月24日 16:15:46

在 Android 中,EditText 作为输入的 UI 视图,是一个比较经常被使用到的控件了。如果仅仅是简单的使用的话,这个视图是比较简单的。不过如果涉及到焦点,就有点麻烦了。正好最近在做的东西和这个有关,分享一下经验。

切换焦点

当我们要在 EditText 输入信息时,要注意的是当前的 EditText 需要有焦点并且是唯一的焦点。网上很多的资料都指出如何获取焦点:

View.requestFocus();

这自然没有错,但是如果目前屏幕上有其它的 EditText 有焦点,那么你输入的时候,其实是输入在其它的 EditText 上的。所以如果目前屏幕上有其它的 EditText 拥有焦点,应该这样处理:

View.clearFocus();
View.requestFocus();

否则的话,你会发现光标在目标 EditText 上闪着,可是输入的内容都跑到其它 EditText 上了。甚至是两个 EditText 都出现了光标。
这个方法适用于用户直接在 EditText 上切换的时候。可以配合setOnFocusChangeListener()一起使用。
比如如下:

// OnFocusChange 中的 b 为焦点的状态,如果目前视图拥有焦点则为真,否则为否。
// 在 passwordText 获取焦点的时候要判断 usernameText 是否符合规则,不符合则重新输入。
passwordText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View view, boolean b) {
        if (usernameText.getText().toString().length() <= 6 && b) {
            passwordText.clearFocus();
            usernameText.setText("");
            usernameText.requestFocus();
        }
    }
});

通过键盘事件来控制

除了让用户自己来选择以外,还有一种更加友好的互动方式,就是在软键盘上显示相应的提示。可以参考这篇文章
这样,我们可以通过监听OnEditorActionListener来处理跳转。OnEditorActionListener需要实现onEditorAction方法,而该方法返回一个布尔值。该值如果为真,则焦点保持不变,而如果为否,则切换焦点。所以我们可以这样来实现:

private TextView.OnEditorActionListener mOnEditorActionListener = new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
        if (i == EditorInfo.IME_ACTION_NEXT) {
            if (usernameText.getText().toString().length() <= 6) {
                // 帐号不满足要求
                usernameText.setText("");
                return true;
            } else {
                return false;
            }
        } else if (i == EditorInfo.IME_ACTION_DONE) {
            // 如果输入完成
            doSometing();
        }
        return false;
    }
};

而为了让其能够起作用,相应的控件应该添加OnEditorActionListener监听。

usernameText.setOnEditorActionListener(mOnEditorActionListener);
passwordText.setOnEditorActionListener(mOnEditorActionListener);

最后,为了让软键盘能够提示相应的信息 ,XML 应该添加imeOptions属性,并且只有设置了singleLine属性为真才能起作用。

<EditText
    android:id="@+id/usernameText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:singleLine="true"
    android:imeOptions="actionNext"/>

<EditText
    android:id="@+id/passwordText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:singleLine="true"
    android:imeOptions="actionDone"/>

这样,就可以达到相同的效果了。

Thanks For Visit

David Lin

版权声明:本文为博主原创文章,未经博主允许不得转载。

DropEditText,带下拉功能的EditText

带下拉功能的DropEditText!
  • afei__
  • afei__
  • 2016年05月28日 16:34
  • 3005

android EditText控件事件监听

在工作中,要实现一个类似iphone锁屏时候的密码解锁界面,要求每一个编辑框里输入只能输入一个字符,最后一个输入完成以后,自动执行下一步动作。整体界面如下图:     界面很简单,没有做美...
  • kakaxi1o1
  • kakaxi1o1
  • 2013年12月24日 00:18
  • 16664

android之自定义带清除内容的EditText

android之自定义带清楚内容的EditText      android在很多地方需要用输入框EditText,输入的内容可以完全清除,这样做的好处,是在有的地方用户体验更好,比如用户在注册登...
  • u011747761
  • u011747761
  • 2015年02月14日 13:18
  • 3457

android editText自动弹出软键盘(输入键盘)

有一个界面有如下的需求:有一个textview上面显示的是400,我点击之后,弹出对话框,对话框中有一个输入框,将400传递过来也是显示400,当点击了textview,默认全选400,此时也同时有输...
  • omayyouhappy
  • omayyouhappy
  • 2015年10月13日 11:06
  • 13461

Android EditText若干知识点和用法

Android关于EditText的一些知识点。
  • qq_15128547
  • qq_15128547
  • 2016年03月22日 16:02
  • 1047

android自定义View之自定义EditText(添加删除功能)

EditTextWithDel组件的功能如下: 1、在没用内容的时候显示不可用的图片状态,在有内容的时候显示可用的图片状态; 2、在有内容的时候点击删除按钮可以删除...
  • ff20081528
  • ff20081528
  • 2013年12月04日 17:36
  • 27703

Android中EditText控件的几种使用方法

转自: http://blog.csdn.net/ahuier/article/details/8982516 EditText是除了TextView控件之外的属性,还可以实现输...
  • yuxiaohui78
  • yuxiaohui78
  • 2014年03月03日 06:59
  • 15102

Android EditText的属性和方法介绍使用及值得注意的点

一、EditView属性详细介绍: 属性名称 描述 android:utoLink 设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。 可选值...
  • u014651216
  • u014651216
  • 2016年11月17日 15:02
  • 2641

Android中监听EditText文本输入

平时在做android开发过程中经常要用到
  • Beyond0525
  • Beyond0525
  • 2014年04月10日 18:29
  • 102524

【我的Android进阶之旅】如何隐藏Android中EditText控件的默认下划线

Android EditText控件是经常使用的控件,但是有时候我们并不需要它的一些默认的属性,比如说下划线,因为有时候这样的默认下划线看起来特别怪异,和其他控件在一起搭配的时候不协调,因此有时候就需...
  • qq446282412
  • qq446282412
  • 2016年11月26日 22:16
  • 5808
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 中的 EditText
举报原因:
原因补充:

(最多只允许输入30个字)