Android TV - 如何停止方向键自动导航到下一个焦点?

标签 android navigation focus television d-pad

所有 Android 专家,

我正在开发 Android TV 应用。 我在 Dpad 导航上遇到问题。 我想在 KeyDown UP 和 DOWN 时停止自动 Dpad 导航。

我在可聚焦的 TextView 上写了一个监听器,如果 TextView 键向上,则向上滚动 ListView ,然后向下键向下滚动。

但下面的代码无法滚动我的 ListView ,当我按下 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;
        }
    });

最佳答案

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

我使用 setDescendantFocusability() 阻止我的其余 fragment ( View 组),而我的方向键焦点进入目标 fragment ,理想情况下是将键 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);
                }
            }
        });

我的目标 fragment 只需要 LEFT 和 RIGHT 让方向键切换到下一个焦点,然后我的 UP 和 DOWN onKey Down 用于滚动 ListView 。

setDescendantFocusability() 在方向键导航焦点到达我的 fragment 聚焦点边缘时启用。

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

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

希望此信息对其他人有所帮助。

谢谢。

关于Android TV - 如何停止方向键自动导航到下一个焦点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33493631/

相关文章:

android - 如何在 Android 中以编程方式在 EditText 中设置 Id

java - Jsoup select 似乎不适用于 Android

android - 如何在抽屉导航下方显示我的布局?

C#:当用户开始输入时激活文本框

c# - 如何强制表单焦点?

android - 当 Activity 在 Android 中启动时,如何阻止 EditText 获得焦点?

android - 协议(protocol)设计

android - 通过来自 Android 的 HTTP Post 请求发送 Base64 编码的图像

html - 导航到另一个页面上的 anchor

html - 下拉菜单导航中子菜单的对齐方式