【发布时间】: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_UP和i == KeyEvent.KEYCODE_DPAD_UP添加一个观察者并确定哪个是false或者捕捉实际的keyEvent和正在发生的动作? -
开始检查并意识到 setOnKeyListener 调用了,但没有覆盖内部的
public boolean onKey- 它没有调用。
标签: android if-statement listener android-tv d-pad