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

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

什么是XForms?

什么是XForms?当前的Web表单的设计无法从表单的表述中分离表单的目的或用途,然而XForms, , 由分别描述表单行为和样式的独立单元组成,这就允许柔性表述选择, 包含经典的XHTML表单,附加...
  • FlySpace
  • FlySpace
  • 2003-05-17 17:29:00
  • 1518

Android中Editext中输入表情图片的方法

  • 2013年04月02日 10:51
  • 720KB
  • 下载

Android Dialog中的EditText 弹出软键盘

其实,这个问题很简单,但是网上的好多资料,都走歪了。直接上代码:final AlertDialog dialog = new AlertDialog.Builder(this).create(); ...
  • JimTrency
  • JimTrency
  • 2017-04-14 17:20:39
  • 836

[Android] EditText 的 inputType属性

android中inputType属性在EditText输入值时启动的虚拟键盘的风格有着重要的作用。这也大大的方便的操作。有时需要虚拟键盘只为字符或只为数字。所以inputType尤为重要。 and...
  • u014544193
  • u014544193
  • 2015-11-18 17:25:48
  • 1258

【Android控件】之EditText的基本用法

EditText简介: ED(EditText的简称)在开发中也是经常使用到的一个控件, 也是一个比较重要的组件,可以说它是用户跟应用进行数据传输的窗口,比如实现一个登陆界面, 需要用户输入账号和密...
  • zouzhigang96
  • zouzhigang96
  • 2016-09-05 10:50:30
  • 1149

AlertDialog中的EditText不能输入

一、描述在项目中有碰到使用AlertDialog,给他设置自定义布局,自定义布局中有包含EditText,但是运行起来后发现EditText不能输入文字,没有焦点,一开始还以为是事件拦截掉了,后来试了...
  • junwen0814
  • junwen0814
  • 2016-01-09 00:34:10
  • 1529

从自定义AlertDialog中获取EditText中的文本解决办法

最近想要实现一个简单的设计,给一个AlertDialog设计一个拥有两个EditText的布局界面,然后点击确认按钮时,返回两个EditText中的内容,就是这么一个简单的设计,耗费了很多时间。  ...
  • LeeCoding
  • LeeCoding
  • 2016-06-06 19:39:12
  • 2244

解决listview里面edittext焦点问题

由于每次弹起输入框,输入法,listview的界面都会重置布局 导致edittext失去焦点,或者焦点错乱 所以我们必须在listview里面对edittext特殊处理 由于重置布局,必须走ge...
  • qq_30983519
  • qq_30983519
  • 2017-07-04 15:02:31
  • 579

Android:EditText插入图片实现图文混排

EditText插入图片实现图文混排
  • sinat_28238111
  • sinat_28238111
  • 2016-04-28 12:15:13
  • 1995

Android ListView布局嵌套EditText不能输入文本

今天才发现ListView与EditText嵌套时会出现EditText不能进行输入的情况,这是因为EditText此时无法获得焦点,这样我们可以通过设置descendantFocusability属...
  • danfengw
  • danfengw
  • 2016-03-02 17:31:12
  • 3011
收藏助手
不良信息举报
您举报文章:Android 中的 EditText
举报原因:
原因补充:

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