Android TV - как остановить автоматический переход D-pad к следующему фокусу?

Все эксперты Android,

Я работаю над приложением для Android TV. У меня проблема с навигацией по Dpad. Я хотел бы остановить автоматическую навигацию по Dpad при нажатии клавиш ВВЕРХ и ВНИЗ.

Я написал слушателя на фокусируемом 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;
        }
    });

person frans84    schedule 03.11.2015    source источник


Ответы (1)


После некоторого исследования у меня появилась идея решить мою проблему.

Я использовал setDescendantFocusability (), чтобы заблокировать остальные мои фрагменты (группу просмотра), в то время как мой фокус 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;
            }
        });

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

желаю, чтобы эта информация помогала другим.

Спасибо.

person frans84    schedule 04.11.2015