それらの実際の違いを知りたい...それぞれをいつ使うべきか、それぞれをどのように使うべきか、そしてどの状況でそれぞれ役立つのか?
いくつかの例を挙げて詳細に説明します。
Android Developers Blogで説明されています: http://Android-developers.blogspot.co.at/2008/12/touch-mode.html
次の引用符で明確になります。
タッチモード自体は、最後のユーザーインタラクションがタッチスクリーンで実行されたかどうかを示すだけなので、非常に理解しやすいものです。たとえば、G1電話を使用している場合、トラックボールでウィジェットを選択すると、タッチモードが終了します。
...
タッチモードでは、フォーカスも選択もありません。グリッド内のリストで選択された項目は、ユーザーがタッチモードに入るとすぐに選択解除されます。同様に、フォーカスモードのウィジェットは、ユーザーがタッチモードに入るとフォーカスがなくなります。
...
フォーカスがタッチモードに存在しないことがわかったので、完全に真実ではないことを説明する必要があります。フォーカスはタッチモードで存在できますが、非常に特別な方法でタッチモードでフォーカス可能と呼びます。この特別なモードは、EditTextなどのテキスト入力を受け取るウィジェット、またはフィルタリングが有効な場合はListView向けに作成されました。
...
タッチモードでフォーカス可能なのは、コードまたはXMLから自分で設定できるプロパティです。ただし、Androidの通常の動作との整合性を損なうため、非常に特殊な状況でのみ慎重に使用する必要があります。ゲームは、フォーカス可能タッチモードプロパティをうまく利用できるアプリケーションの良い例です。 MapViewをGoogleマップのようにフルスクリーンで使用する場合、タッチモードでフォーカス可能を正しく使用できる別の良い例です。
例を挙げて詳細に説明してください
私にあなた自身の経験を与えます:
多数のImageButtonsを使用したアクティビティを備えたGoogle TVアプリケーションがありました。
ImageButtonsを選択可能にしたかった。
したがって、ユーザーがマウスまたはリモートコントローラーでそれらをクリックすると、それらは選択された状態になります(私の場合は強調表示されています)。その後、ユーザーが選択したImageButton
を押すと、アクションがトリガーされます。 この正確な動作は、XMLレイアウトでfocusableInTouchMode
プロパティを有効にすることで達成されました。
私がしなければならなかったのは、ImageButtonsと出来上がりのために普通のonClickListener
を設定することだけでした!
携帯電話でアプリケーションをチェックしていませんが、おなじみの結果が得られると思います。
いつ?
私がテストしたユースケースをお伝えしました:最初にonClickListener
をクリックして選択した後、2回目のクリックでボタンのButton
にアクションをトリガーさせたい場合。
最初のクリックを使用して「フォーカス」を獲得し、ボタンにズームインスケールアップアニメーションを表示しました。
どうやって?
XMLレイアウトファイルでボタンのプロパティfocusableInTouchMode
をtrue
に設定するだけです。
フォーカスはビューの状態であり、一般的にトラックボールとdpadでフォーカスを変更できます。状態がフォーカスされると、ビューの背景が異なる場合があります。
タッチモードでフォーカス可能にすると、ユーザーがビューに触れたときにビューがフォーカスを取得できます。この種のコンポーネントの良い例はEditText
です。
Button
またはクリック可能なコンポーネントが押された状態は通常、興味のあるものです。
ユーザーは、ハードウェアキーまたはボタンを使用するか、画面に触れることにより、デバイスと対話できます。画面に触れると、デバイスがタッチモードになります。ユーザーは、画面上の仮想ボタン、画像などに触れることで、操作することができます。
デバイスがタッチモードかどうかを確認するには、Viewクラスの isInTouchMode() メソッドを呼び出します。