Android TV - Как отключить автоматическую навигацию D-Pad к следующему фокусу?
Все эксперты по Android,
Я работаю над приложением Android TV. Я сталкиваюсь с проблемой на Dpad навигации. Я хотел бы остановить автоматическую навигацию Dpad, пока KeyDown ВВЕРХ и ВНИЗ.
я написал слушателя на фокусируемом TextView, если TextView на клавишу UP, затем прокрутить вверх список просмотра, и клавиша 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;
}
});
1 ответ
После некоторого исследования у меня появилась идея решить мою проблему.
я использовал 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);
}
}
});
моему целевому фрагменту просто нужно было ВЛЕВО и ВПРАВО, чтобы dpad переключился на следующий фокус, а затем мои ВВЕРХ и ВНИЗ onKey Down используются для прокрутки списка.
setDescendantFocusability() включить, пока фокус навигации dpad достиг края моей точки фокусировки фрагмента.
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;
}
});
это то, из чего я вышел, чтобы решить мою проблему.
Желаю этой информации помочь другим.
благодарю вас.