Android TV - 如何阻止D-pad自动导航到下一个焦点?

时间:2015-11-03 07:30:55

标签: android navigation focus television d-pad

所有Android专家,

我正在使用Android TV应用。 我在Dpad导航上面临问题。 我想在KeyDown UP和DOWN时停止自动Dpad导航。

我在一个可聚焦的TextView上写了一个监听器,如果按键UP上的TextView然后向上滚动列表视图,按键向下滚动向下。

但是下面看到的代码无法滚动我的列表视图,当我按下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 个答案:

答案 0 :(得分:0)

经过一番研究,我有一些想法来解决我的问题。

我使用 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);
                }
            }
        });

我的目标片段只需要LEFT和RIGHT让dpad更改为下一个焦点,然后我的UP和DOWN onKey Down用于滚动列表视图。

当ppad导航焦点到达片段对焦点的边缘时,

setDescendantFocusability() 启用。

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

这就是我解决问题的方法。

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

谢谢。