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;
            }
        });

это то, из чего я вышел, чтобы решить мою проблему.

Желаю этой информации помочь другим.

благодарю вас.

Другие вопросы по тегам