Androidフォーカス問題

34528 ワード

今日はAndroidプラットフォームの焦点の問題を解決しました.その中で重要な問題を発見したのはAndroidのtouchModeです.JavaSwingプラットフォームから来た人は、setFocusable()とrequestFocus()メソッドに注目しますが、AndroidのViewには、setFocusableInTouchMode()とrequestFocusFromTouch()メソッドの2つのメソッドがあります.この2つの方法はAndroid上の焦点取得問題を解決する鍵です.
同時にViewクラスには、Focuseイベントを傍受する際にclick()を実行するかどうかを判断するのに役立つisInTouchMode()もある.コードは次のとおりです.
クリップボードXML/HTMLコードにコピー
ImageButton.OnFocusChangeListener mFocusChangeListener = new ImageButton.OnFocusChangeListener(){  
      
    public void onFocusChange(View v, boolean hasFocus) {  
        Log.d("FocuseChange", "Focuse has changed.");  
          if (hasFocus) {  
//touchmodeの場合はclickを実行します.そうしないと、選択されます.   
              v.setBackgroundDrawable(getResources().getDrawable(R.drawable.));  
              if (v.isInTouchMode()){  
                  ((ImageButton)v).performClick();  
              }   
          } else {  
              v.setBackgroundDrawable(getResources().getDrawable(R.));  
              v.getBackground().setAlpha(100);  
          }  
          
    }  
};  
 
システムフレームワークは、日常的な焦点移動を処理するユーザの入力に応答し、そのパケットが焦点を変える(インタフェースが除去され、非表示になる、または新しいViewとして利用可能な状態になる)、isFocusable()という方法でviewが焦点を受け入れる資格があるかどうか、setFocusable()を知ることができる.をクリックして、ビューがフォーカスを受け取る資格を設定します.タッチモードでisFocusableInTouchMode()を呼び出すことができます.フォーカスがあるか否かを知る点触に応答してもよいし、setFocusableInTouchMode()によってもよい.ポイントタッチにフォーカスする資格を設定する.システムフレームワークの制御焦点が別のコンポーネントに移動するアルゴリズムは、ある方向に隣接するコンポーネントであり、極めて個別の場合、デフォルトのアルゴリズムは開発者の予想要求に合わない可能性があります.この場合、nextFocusDown、nextFocusLeft、nextFocusRightというXML属性のレイアウトファイルを上書きすることができます.とnextFocusUpは、現在のインタフェースから次のインタフェースにフォーカスが移動するIdを明確にするために値を設定します.例:
android:orientation="vertical"
... >