Androidケース開発、TV開発、経験総括NO.1

3212 ワード

Android
TVアプリ開発と一般的なAndroid開発の最大の違いはフォーカス制御であり、ユーザーがAndroid TV機器を使用して主にリモコンでアプリを操作する
トップボックスのTVアプリケーションは携帯電話アプリケーションとは異なり、タッチスクリーンがないものが多く、リモコンに頼るしかないため、焦点の位置を維持し、現在の操作作用の対象をユーザーに知らせる.しかし、いくつかのappは、focusに対するシステムの判断に基づいて、
表示される状況:上下ナビゲーション時、所望の結果ではない.エッジが移動すると、フォーカスが失われる場合がある.ある位置に直接位置決めしたい場合があります
Androidはいくつかのフォーカス関連属性を提供し、既存のフレームワーク層の下でViewの属性を設定することでフォーカスを得る
 
android:focusable
:コントロールがフォーカスを得ることができるかどうかを設定します(TV開発では、この必須の1つで、コントロールのデフォルトはfocusがありません)
フォーカス制御では、Androidには独自のフォーカス移動軌跡があり、システムの軌跡に従ってフォーカスを移動したくない場合は、次の4つのオプションでフォーカスを指定する必要があります.
       android:nextFocusDown:                 
       android:nextFocusUp:                 
       android:nextFocusLeft:                 
       android:nextFocusRight:                 

requestFocusと
:指定したviewまたはそのサブクラスにフォーカスを強制的に設定します.android:focusableがtrueでフォーカスを取得できることを前提とします.
android:background
:背景の設定
上の基礎理論はすでにあったので,次にどのように実際に話しますか.
フォーカスの問題を処理するアクション:
一.
Android独自の方法を採用し、焦点の上下左右を直接制御します.
しかし、この方法の前提は、各viewのidを知らなければならないことです.よく使われるシーン:XMLにはbuttonが山積みになっていて、大きさが異なり、システムの自己制御フォーカスを使用すると、私たちが望んでいる上下左右ではないかもしれません.フォーカスをその位置に快適に到達させることができません.そのため、
android:nextFocusDown="@id/view_id"
android:nextFocusUp="@id/view_id"
android:nextFocusLeft="@id/view_id"
android:nextFocusRight="@id/view_id"

上下左右キーを押して到着:IDはview_idのview、このviewは
 android:focusable
="true"
したがってjavaではviewを通過する.setId(…)はviewの特定IDを指定し、viewを通過する.setNextLeftView(…)など4つの方法でこのviewの上下左右移動後に到達するviewを制御する.
しかし、この方法は、IDが設定されているシーンにのみ適用され、ダイナミックレイアウトのシーンには適用されません.
これは焦点運動ルートを変更し、実際の焦点がどのようにユーザーに研究されるかを見ることができます.この時、焦点の問題を監視し、背景色をタイムリーに修正する必要があります.
各Viewに対してフォーカスキャプチャ実績を設定する必要があります(
setOnFocusChangeListener
)をクリックします.
        View.setOnFocusChangeListener(){   
              public void onFocus(boolean Focus){   
                   if( Focus ){  
                    View.setBackground(R.color.green); // View     ,View         , View            
                         
                    } else{  
                    View.setBackground(R.color.while); //  View    , View          , View         
                                
                    } 
              }

ビューを傍受する以外は
setOnFocusChangeListenerは、リモコンの上下左右のボタンをリスニングすることもできます.
            public void OnKeyDown(int keyCode, KeyEvent keyEvent){  
                    if( keyEvent.KEYCODE_DROP_UP== keyCode ){  //          
                            mImgBtnArray1[ThirdIndx ].requestFocus;  
                     }  
                    if( keyEvent.KEYCODE_DROP_DOWN == keyCode ){  //          
                              mImgBtnArray3[ ThirdIndx ].requestFocus;  
                     }  
                    if( keyEvent.KEYCODE_DROP_LEFT == keyCode ){  //          
                              mImgBtnArray1[ ThirdIndx-1 ].requestFocus;  
                     }  
                    if( keyEvent.KEYCODE_DROP_RIGHT == keyCode ){  //          
                              mImgBtnArray1[ ThirdIndx+1 ].requestFocus;   
                     }  
              }