TV焦点的获取

TV上和手机的区别主要是焦点的获取和响应
第一种方式:在activity中

    private void handleFocus(int index, boolean hasFocus) {
        try {
//            setFocusable这个是用键盘是否能获得焦点
//            setFocusableInTouchMode这个是触摸是否能获得焦点
            memberItems[index].setFocusableInTouchMode(hasFocus);
            memberItems[index].setFocusable(hasFocus);
            if (hasFocus) {
                memberItems[index].requestFocus();
            }
            if (index == 0) {
//          scrollTo在当前视图内容偏移至(x , y)坐标处。
//          smoothScrollTo类似于scrollTo,但是滚动的时候是平缓的而不是立即滚动到某处。另外,smoothScrollTo()方法可以打断滑动动画。
                pay_list.smoothScrollTo(0, 0);
            } else {
                pay_list.smoothScrollTo(790 * (index - 1) + 130, 0);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

调用,传入参数

    @Override
    public void loadMemberInfoFinish(CallBack<List<MemberCardsModel>> callBack) {
        paylist.addAll(callBack.data);
        initMemberItem();
        handleFocus(0, true);
        currentFocusIndex = 0;
    }

第二种:在fragment中

public interface IFocusChangeListener {
    public void onFocus(IUIViewBase view, boolean hasFocus);
}
 @Override
    public void onFocusChange(View arg0, boolean arg1) {
        if (focusChangeListener != null) {
            focusChangeListener.onFocus(this, arg1);
        }
        hasFocus = arg1;

        if (scaleFocus) {
            getView().bringToFront();
            doScaleAnimation(arg1);
        }
    }
 @Override
    public boolean hasFocus() {
        return hasFocus;
    }
@Override
        public void onFocus(IUIViewBase iuiViewBase, boolean b) {
            if (b) {              layout.setBackgroundResource(R.drawable.home_sc_selected);
            } else {
                layout.setBackgroundResource(R.drawable.home_sc_selected_tm);
            }
        }
@Override
    public boolean requestFocus() {
        return true;
    }

    @Override
    public FocusReturnType onKeyCenter() {
        if (currentFocus == 0) {
            SelectionUrlOne();

        } else {

            SelectUrl();
        }
        return FocusReturnType.hasFocus;
    }

Log检测响应codekey对应的具体的值,方法:

 Log.i("dfghj", "preSegmentBtn keyCode " + keyCode);
                if (listener != null && (keyCode == KeyEvent.KEYCODE_ENTER || keyCode == KeyEvent.KEYCODE_DPAD_CENTER) && event.getAction() == KeyEvent.ACTION_DOWN) {
                    listener.onPrevBtnClicked();
                    return true;
                }
                return false;

第一个true,有事件本身消费,第二个false,消费后把控制全还给父类。

还有一个比较麻烦的问题,什么时候调用父类的,什么时候调用自己对应的keycode对相关功能进行操作,例如:音量我在加减的时候怎么屏蔽掉系统的音量加减
在activity里面可以直接做处理

  switch (keyCode){
                case KeyEvent.KEYCODE_VOLUME_UP://音量+

                  return true;
                case KeyEvent.KEYCODE_VOLUME_DOWN://音量-

                  return true;
                case KeyEvent.KEYCODE_DPAD_UP:
                    return   onkeyUp();
                case KeyEvent.KEYCODE_DPAD_DOWN:
                    return  onkeydown();

但是在frgment里面

switch (keyCode) {
            case KeyEvent.KEYCODE_VOLUME_UP:

                ((KaraokeAudioEffectDialog) dialog).turnUpMusicVolume();
                ((KaraokeAudioEffectDialog) dialog).turnUpMicVolume();
                seekBar.setProgress(KaraokeAudioEffectDialog.musicVoice);
                value.setText(String.valueOf(KaraokeAudioEffectDialog.musicVoice));
                if (!dialog.isShowing()) {

                    if (!volume.isVisible()) {
                        volume.clearAnimation();
                        volume.setVisible(true);
                    }
                }
                if (volume.isVisible()) {
                    UIHandler.removeCallbacks(runnable);
                    UIHandler.postDelayed(runnable, 2000);
                }
                return FocusReturnType.systemFocus;

所以在fragment里面处理的需要放在他的activity上面进行

 @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
            case KeyEvent.KEYCODE_VOLUME_UP:
                return false;
            case KeyEvent.KEYCODE_VOLUME_DOWN:
//                playFragment.onKeyDown(keyCode, event);
                return false;
        }
        return super.onKeyDown(keyCode, event);

都返回false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值