【问题标题】:android - onKeyDown mFlags variableandroid - onKeyDown mFlags 变量
【发布时间】:2011-08-18 17:53:07
【问题描述】:

我有一个从 onKeyDown 事件返回的日志,并且标志导致数字 520。我如何找出标志是什么?我假设它的 520 = 512 + 8 = FLAG_TRACKING + FLAG_FROM_SYSTEM

我需要确定,我听说它与十六进制代码有关。如何转换并找出答案?

来自日志:

onKeyUp - 键码:118 |信息:KeyEvent{action=ACTION_UP code=118 repeat=0 meta=0 scancode=766 mFlags=520}

我需要知道 mFlags 的名称是什么。

谢谢。

【问题讨论】:

  • 修改了我的答案。只有 ifs.. 没有 elses..

标签: android flags onkeydown


【解决方案1】:

这里是完整的代码:

Log.i("==BCR==", "onKeyDown - keycode: " + keyCode + " | isCanceled: " + event.isCanceled() + " | info: "  + event.toString());

        if ((event.getFlags() & KeyEvent.FLAG_FROM_SYSTEM) == KeyEvent.FLAG_FROM_SYSTEM)
        {

            Log.i("==BCR==", "onKeyDown - keycode: " + keyCode + " | FLAG: FLAG_FROM_SYSTEM");

        }else {}

        if ((event.getFlags() & KeyEvent.FLAG_TRACKING) == KeyEvent.FLAG_TRACKING)
        {

            Log.i("==BCR==", "onKeyDown - keycode: " + keyCode + " | FLAG: FLAG_TRACKING");
        }else {}



        ///FLAG_WOKE_HERE
        if ((event.getFlags() & KeyEvent.FLAG_WOKE_HERE) == KeyEvent.FLAG_WOKE_HERE)
        {

            Log.i("==BCR==", "onKeyDown - keycode: " + keyCode + " | FLAG: FLAG_WOKE_HERE");
        }else {}


        //FLAG_SOFT_KEYBOARD
        if ((event.getFlags() & KeyEvent.FLAG_SOFT_KEYBOARD) == KeyEvent.FLAG_SOFT_KEYBOARD)
        {

            Log.i("==BCR==", "onKeyDown - keycode: " + keyCode + " | FLAG: FLAG_SOFT_KEYBOARD");
        }else {}

        //FLAG_KEEP_TOUCH_MODE
        if ((event.getFlags() & KeyEvent.FLAG_KEEP_TOUCH_MODE) == KeyEvent.FLAG_KEEP_TOUCH_MODE)
        {

            Log.i("==BCR==", "onKeyDown - keycode: " + keyCode + " | FLAG: FLAG_KEEP_TOUCH_MODE");
        }else {}


        //FLAG_EDITOR_ACTION
        if ((event.getFlags() & KeyEvent.FLAG_EDITOR_ACTION) == KeyEvent.FLAG_EDITOR_ACTION)
        {

            Log.i("==BCR==", "onKeyDown - keycode: " + keyCode + " | FLAG: FLAG_EDITOR_ACTION");
        }else {}


        //FLAG_CANCELED
        if ((event.getFlags() & KeyEvent.FLAG_CANCELED) == KeyEvent.FLAG_CANCELED)
        {

            Log.i("==BCR==", "onKeyDown - keycode: " + keyCode + " | FLAG: FLAG_CANCELED");
        }else {}


        //FLAG_VIRTUAL_HARD_KEY
        if ((event.getFlags() & KeyEvent.FLAG_VIRTUAL_HARD_KEY) == KeyEvent.FLAG_VIRTUAL_HARD_KEY)
        {

            Log.i("==BCR==", "onKeyDown - keycode: " + keyCode + " | FLAG: FLAG_VIRTUAL_HARD_KEY");
        }else {}

        //FLAG_LONG_PRESS
        if ((event.getFlags() & KeyEvent.FLAG_LONG_PRESS) == KeyEvent.FLAG_LONG_PRESS)
        {

            Log.i("==BCR==", "onKeyDown - keycode: " + keyCode + " | FLAG: FLAG_LONG_PRESS");
        }else {}

        //FLAG_CANCELED_LONG_PRESS
        if ((event.getFlags() & KeyEvent.FLAG_CANCELED_LONG_PRESS) == KeyEvent.FLAG_CANCELED_LONG_PRESS)
        {

            Log.i("==BCR==", "onKeyDown - keycode: " + keyCode + " | FLAG: FLAG_CANCELED_LONG_PRESS");
        }else {}

【讨论】:

    【解决方案2】:

    您可以这样做来检查

    if (mFlags & FLAG_TRACKING == FLAG_TRACKING)
         // it contains FLAG_TRACKING
    if (mFlags & FLAG_FROM_SYSTEM == FLAG_FROM_SYSTEM)
         // its contains FLAG_FROM_SYSTEM flag.
    if ... etc...
    

    【讨论】:

    • 它可以是标志的组合思想。特别是 520 是两者的组合。因此它将通过所有这些方法 520 并且不报告任何内容。
    • 只有在包含特定标志时,控件才会进入if 块。因此,在每个if 中,您可以将标志附加到字符串并记录所有离散标志值。我认为这回答了你的问题。 :)
    【解决方案3】:

    当按键按下事件发生时,为什么不简单地打印常量值。

    http://developer.android.com/reference/android/view/KeyEvent.html#KEYCODE_NUMPAD_DOT

    【讨论】:

    • 因为flag只有几个,剩下的就是它们的组合。 KEY_ 不是标志,它是键码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多