【问题标题】:KeyEvent of D-pad for Android TVAndroid TV 方向键的 KeyEvent
【发布时间】:2020-07-07 09:16:35
【问题描述】:

在活动中,我在工具栏中有 TabLayout、ViewPager 和菜单按钮(汉堡包)。

默认情况下,使用键盘上的箭头,我正在从选项卡移动到查看分页器项目,但我无法将焦点放在工具栏菜单按钮上。

首先当 KeyEvent.KEYCODE_DPAD_UP 被按下时我听不到,我想知道为什么。

我的代码:

viewPager = findViewById(R.id.viewpager);
viewPager.setAdapter(adapter);
tabLayout = findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);

tabLayout.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View view, int i, KeyEvent keyEvent) {
        if ((keyEvent.getAction() == KeyEvent.ACTION_UP) && (i == KeyEvent.KEYCODE_DPAD_UP)) {
            toolbar.setFocusable(true);
            toolbar.setFocusableInTouchMode(true);
            tabLayout.setNextFocusUpId(R.id.toolbar);
            Log.d(TAG, "KEYCODE_DPAD_UP");
            tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
            tabLayout.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
        }
        return false;
    }
});

我的 if 语句有什么问题?

【问题讨论】:

  • 你的听众会被叫到吗?
  • @Sdghasemi 是的,它被称为。用调试器检查。
  • 那你为什么不为keyEvent.getAction() == KeyEvent.ACTION_UPi == KeyEvent.KEYCODE_DPAD_UP 添加一个观察者并确定哪个是false 或者捕捉实际的keyEvent 和正在发生的动作?
  • 开始检查并意识到 setOnKeyListener 调用了,但没有覆盖内部的public boolean onKey - 它没有调用。

标签: android if-statement listener android-tv d-pad


【解决方案1】:

您是否尝试过覆盖活动onKeyDown 方法并在那里调用您的代码:

public class YourActivity extends AppCompatActivity {
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
            // Your code here
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    • 2017-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多