Scrollview 滑动和物理键盘的方向键冲突

最近在做TV端的开发,期间使用到ScrollView这个控件,但是这个控件自身有一个滑动事件,当使用遥控器时,方向键会和Scrollview的滑动冲突。系统会优先相应Scrollview的滑动事件,当Scrollview滑动到最后时,才开始相应OnKeyDown方法。开始想要禁止掉Scrollview的滑动事件,但是用过实践之后发现并没有效果。于是开始各种翻阅解决问题的方法。终于发现Scrollview自身有一个OnKeyListener()方法,可以控制自身的滑动。

       代码如下:

myHorizontalScrollView.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
          
                if (keyCode == KeyEvent.KEYCODE_ENTER) {
                    centerbutton();
                }
                if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
                    upbutton();
                }
                if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
                    downbutton();
                }
                if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
                    
                    leftbutton();
                }
                if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
                   
                    rightbutton();
                }
        return false;
    }
});



终于等到你,那么就赶紧去操作吧。然后现实很残酷,在实践的时候,每次按方向键都响应两次是个什么鬼?这可怎么搞?再去查一查,发现这个方法是在按键按下和抬起的时候分别响应。所以我就要加一个判断喽?来吧,小二把刚出锅的代码端上来!


myHorizontalScrollView.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                if (keyCode == KeyEvent.KEYCODE_ENTER) {
                    centerbutton();
                }
                if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
                    upbutton();
                }
                if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
                    downbutton();
                }
                if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
                    leftbutton();
                }
                if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
                    rightbutton();
                }
        }
        return false;
    }
});

这个问题终于解决了。。

你可能感兴趣的:(android,电视)