• 【Android】EditText的一个问题


    EditText用于编辑文字,经常需要监听输入的字符,尤其是回车,删除等特殊字符,除了addTextChangedListener这个比较简单的方法之外,还有类似于下面的方法:

     1 editText.setOnKeyListener(new View.OnKeyListener() {
     2             @Override
     3             public boolean onKey(View v, int keyCode, KeyEvent event) {
     4                 Log.d("RFV", "~~ " + keyCode);
     5                 if (event.getAction() == KeyEvent.ACTION_DOWN
     6                         && keyCode == KeyEvent.KEYCODE_DEL) {
     7                     if (itemList.size() > 0 && editText.length() == 0) {
     8                         removeItem();
     9                         if(listener != null)
    10                             listener.dataChange();
    11                     }
    12                 }
    13                 
    14                 if(event.getAction() == KeyEvent.ACTION_DOWN
    15                         && keyCode == KeyEvent.KEYCODE_BACK){
    16                     if(listener != null)
    17                         listener.back();
    18                 }
    19                 
    20                 if (keyCode == KeyEvent.KEYCODE_ENTER) {
    21                     String name = editText.getText().toString();
    22                     if (!TextUtils.isEmpty(name)) {
    23                         addItem(name);
    24                         if(listener != null)
    25                             listener.dataChange();
    26                         editText.setText("");
    27                         editText.requestFocus();
    28                     }
    29                     return true;//直接拦截所有DOWN,UP事件
    30                 }
    31                 return false;
    32             }
    33         });

    从代码中我们很容易看到这个方法不但可以监听事件(Down和Up),还能监听到底是哪一个按键。下面讲两点,我犯过错误:

    1)关于最后的return false:我曾经写过return true,发现不能输入数字(标准输入法下),我的猜测是,在每次EditText接受输入之前,事件都会首先经过OnKeyListener,如果返回true,则事件不会再被传递;

    2)关于最后一个判断,之前我也和前面两个判断一样,加入了判断是否是Down事件的判断,然后我发现很奇怪事情,那就是当我点击回车之后,editText一直无法获取焦点,去掉之后可以,一个猜测是因为Down事件返回的是true,所以Up事件一定会传递到这里进行处理,又因为Up事件返回的是false,所以又会继续被处理,而这个时候焦点很可能被转移到键盘(其实不是很准确,应该另有原因)

  • 相关阅读:
    数据结构笔记
    并查集
    计算两个数的最大公约数和最小公倍数
    行盒
    浏览器兼容性和布局
    Java中HashMap等的实现要点浅析
    关于js异步上传文件
    填充路径时所使用的 “非零环绕规则”
    XP极限编程
    假如森林里有一棵树倒下了
  • 原文地址:https://www.cnblogs.com/lqminn/p/2950995.html
Copyright © 2020-2023  润新知