所有Android专家,
我正在使用Android TV应用。 我在Dpad导航上面临问题。 我想在KeyDown UP和DOWN时停止自动Dpad导航。
我在一个可聚焦的TextView上写了一个监听器,如果按键UP上的TextView然后向上滚动列表视图,按键向下滚动向下。
但是下面看到的代码无法滚动我的列表视图,当我按下DOWN时,我的焦点移动到其他焦点。
有没有可以覆盖自动对焦导航的解决方案?当我按下向上和向下键时,我希望我的TextView忽略自动导航到下一个焦点。
谢谢。
textView.setOnKeyListener(new View.OnKeyListener(){
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch(keyCode) {
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_PAGE_UP:
listview_scrollUP();
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
case KeyEvent.KEYCODE_PAGE_DOWN:
listview_scrollDOWN();
break;
}
}
return false;
}
});
答案 0 :(得分:0)
经过一番研究,我有一些想法来解决我的问题。
我使用 setDescendantFocusability() 阻止我的其余片段(viewgroup),同时我的dpad焦点进入目标片段,理想情况是将键向上和向下分开为了我的目的用法(没有处理dpad导航下一个焦点)。
textview.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
LinearLayout menu = (LinearLayout)getActivity().findViewById(R.id.mainMenuLayout);
menu.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
}
}
});
我的目标片段只需要LEFT和RIGHT让dpad更改为下一个焦点,然后我的UP和DOWN onKey Down用于滚动列表视图。
当ppad导航焦点到达片段对焦点的边缘时,setDescendantFocusability() 启用。
textview.setOnKeyListener(new View.OnKeyListener(){
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch(keyCode) {
case KeyEvent.KEYCODE_DPAD_LEFT:
LinearLayout menu = (LinearLayout)getActivity().findViewById(R.id.mainMenuLayout);
menu.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS);
menuItem1.requestFocus();
break;
case KeyEvent.KEYCODE_DPAD_UP:
case KeyEvent.KEYCODE_PAGE_UP:
listview_scrollUP();
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
case KeyEvent.KEYCODE_PAGE_DOWN:
listview_scrollDOWN();
break;
}
}
return false;
}
});
这就是我解决问题的方法。
希望此信息可以帮助其他人。
谢谢。