3

すべての Android エキスパート、

私はAndroid TVアプリに取り組んでいます。Dpad ナビゲーションで問題が発生しました。KeyDown UP と DOWN の間、自動 Dpad ナビゲートを停止したいと思います。

フォーカス可能な TextView にリスナーを書きました。TextView がキー UP の場合、リストビューを上にスクロールし、キー DOWN が下にスクロールします。

しかし、以下のコードはリストビューのスクロールに失敗し、下を押すとフォーカスが他のフォーカスポイントに移動します。

オート フォーカス ナビゲーションをオーバーライドできる解決策はありますか? UP キーと 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;
        }
    });
4

1 に答える 1

2

いくつかの調査の後、私は自分の問題を解決するためのアイデアを得ました。

私は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 を次のフォーカスに変更するために LEFT と RIGHT が必要でした。次に、リストビューのスクロールに UP と DOWN onKey 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;
            }
        });

これが私の問題を解決するために出てきたものです。

この情報が他の人に役立つことを願っています。

ありがとうございました。

于 2015-11-04T02:23:38.280 に答える