Android 电视 - 如何停止方向键自动导航到下一个焦点?
Android TV - How to stop D-pad auto navigate to next focus?
所有Android位专家,
我正在开发 Android 电视应用。
我在 Dpad 导航上遇到问题。
我想在 KeyDown UP 和 DOWN 时停止自动 Dpad 导航。
我在可聚焦的 TextView 上写了一个监听器,如果 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;
}
});
经过一番研究,我有了解决问题的想法。
我使用 setDescendantFocusability() 阻止我的其余片段(viewgroup),而我的 dpad 焦点进入目标片段,理想情况下是space 出于我的目的使用 UP 和 DOWN 键(不处理 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 让方向键切换到下一个焦点,然后我的 UP 和 DOWN onKey Down 用于滚动列表视图。
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;
}
});
这就是我解决问题的方法。
希望此信息对其他人有所帮助。
谢谢。
所有Android位专家,
我正在开发 Android 电视应用。 我在 Dpad 导航上遇到问题。 我想在 KeyDown UP 和 DOWN 时停止自动 Dpad 导航。
我在可聚焦的 TextView 上写了一个监听器,如果 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;
}
});
经过一番研究,我有了解决问题的想法。
我使用 setDescendantFocusability() 阻止我的其余片段(viewgroup),而我的 dpad 焦点进入目标片段,理想情况下是space 出于我的目的使用 UP 和 DOWN 键(不处理 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 让方向键切换到下一个焦点,然后我的 UP 和 DOWN onKey Down 用于滚动列表视图。
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;
}
});
这就是我解决问题的方法。
希望此信息对其他人有所帮助。
谢谢。