2015-11-03 3 views
3

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

Я работаю над приложением Android TV. Я сталкиваюсь с проблемой при навигации по Dpad. Я бы хотел остановить автоматический переход Dpad во время нажатия клавиш и вниз.

Я написал слушателя на фокусируемом TextView, если TextView на клавише UP, а затем прокрутите вверх по списку, а клавиша DOWN прокрутит DOWN.

, но приведенный ниже код не смог прокрутить мой список, мой фокус перемещается в другую точку фокусировки, а я нажимаю DOWN.

Есть ли какое-либо решение, которое я могу переопределить для навигации с автофокусом? я бы хотел, чтобы мой TextView игнорировал автоматическую навигацию к следующему фокусу, пока я нажимаю клавиши UP и DOWN.

спасибо.

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

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

я использовал setDescendantFocusability() блокировать остальную часть моих фрагментов (ViewGroup) в то время как мой DPad фокус ввода целевого фрагмента, идеально, в космос из кнопки вверх и вниз для моего использования цели (без обработки DPad Navigate следующий фокус).

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 к следующему фокусу, а затем мой UP и DOWN OnKey вниз используются для прокрутки ListView.

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

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

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

спасибо.

Смежные вопросы