2015-11-03 76 views
3

所有的Android專家,Android TV - 如何停止D-pad自動導航到下一個焦點?

我正在開發Android TV應用程序。 我面對Dpad導航問題。 我想在KeyDown UP和DOWN時停止自動Dpad導航。

我在可調焦的TextView上編寫了一個監聽器,如果按鍵UP上的TextView然後向上滾動列表視圖,然後按向下滾動向下。

但下面的代碼看不到滾動我的列表視圖,我的焦點移動到其他焦點,而我按下。

有沒有解決方案,我可以覆蓋自動對焦導航?我想我的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; 
     } 
    }); 

回答

0

經過一番研究,我得到了一些想法來解決我的問題。

我用setDescendantFocusability()阻止我的片段(的ViewGroup)的其餘部分,而我DPAD焦點進入靶向片段,理想地是空間出來的鍵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); 
       } 
      } 
     }); 

我的目標片段只需要左,右讓DPAD變化到下一個焦點,然後我的UP和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; 
      } 
     }); 

這就是我出來解決我的問題。

希望此信息可以幫助其他人。

謝謝。

相關問題