• Android 输入法截取key优先于view


    为了验证编写了个例子

    首先是输入法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    public class RemoteKeyboard extends InputMethodService  {
     
      @Override public boolean onKeyDown(int keyCode, KeyEvent event) {
            if (processKey(event, 0 != event.getRepeatCount()))
                return true;
            return super.onKeyDown(keyCode, event);
        }
     
        @Override public boolean onKeyUp(int keyCode, KeyEvent event) {
            if (processKey(event, true))
                return true;
            return super.onKeyUp(keyCode, event);
        }
     
        private boolean processKey(KeyEvent event, boolean doIt) {
             Log.e("======= " ," ============ processKey");
             return false;
        }
    }


    其次是app view

    1
    2
    3
    4
    5
    6
    7
    final TextView et1 = (TextView)findViewById(R.id.editText1);
    et1.setOnKeyListener(new OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event)
        {
            Log.e("====================","====OnKeyListener ");
        }


    运行程序打印

    ============================ : ============ processKey

    ==================== :====OnKeyListener

    ============================ : ============ processKey

    ==================== :====OnKeyListener

    第一遍应该是KeyDown, 第二遍应该是 KeyUp, 说明Android 输入法截取key优先于view

    又试验了一下改写system/usr/keychars/Generic.kcm

    把 B 改为

    key B {
    base: 'b' fallback DPAD_CENTER
    }

    在一个不可编辑框, log 如下

    12-23 05:18:09.093 118 118 E ============================ : ============ processKey

    12-23 05:18:09.094 118 118 E ============================ : ============ processKey
    12-23 05:18:09.163 118 118 E ============================ : ============ processKey
    12-23 05:18:09.163 118 118 E ============================ : ============ processKey

    说明b没有被 accept,而后又调用了 DPAD_CENTER

    在一个可编辑框,b被accept, log 如下

    ============================ : ============ processKey

    ============================ : ============ processKey

    说明没有调用 fallback

    如果改法如下

    key B {
    base: fallback DPAD_CENTER
    }

    在一个可编辑框也要打4行log, 说明 fallback被调用了

    结伴旅游,一个免费的交友网站:www.jieberu.com

    推推族,免费得门票,游景区:www.tuituizu.com

  • 相关阅读:
    Windows下PATH等环境变量详解
    html表单,做个申请邮箱界面练习。
    截取字符串,去空格的练习。
    for循环
    c# if else的练习,判断闰年,输入日期,输出这是今年的的多少天!
    HTML
    输入输出2
    输入输出练习1
    Map练习
    数据库设计范式
  • 原文地址:https://www.cnblogs.com/rabbit-bunny/p/4192839.html
Copyright © 2020-2023  润新知