web-dev-qa-db-ja.com

focusableとfocusableInTouchModeの違いは?

それらの実際の違いを知りたい...それぞれをいつ使うべきか、それぞれをどのように使うべきか、そしてどの状況でそれぞれ役立つのか?

いくつかの例を挙げて詳細に説明します。

71
Xar E Ahmer

Android Developers Blogで説明されています: http://Android-developers.blogspot.co.at/2008/12/touch-mode.html

次の引用符で明確になります。

タッチモード自体は、最後のユーザーインタラクションがタッチスクリーンで実行されたかどうかを示すだけなので、非常に理解しやすいものです。たとえば、G1電話を使用している場合、トラックボールでウィジェットを選択すると、タッチモードが終了します。

...

タッチモードでは、フォーカスも選択もありません。グリッド内のリストで選択された項目は、ユーザーがタッチモードに入るとすぐに選択解除されます。同様に、フォーカスモードのウィジェットは、ユーザーがタッチモードに入るとフォーカスがなくなります。

...

フォーカスがタッチモードに存在しないことがわかったので、完全に真実ではないことを説明する必要があります。フォーカスはタッチモードで存在できますが、非常に特別な方法でタッチモードでフォーカス可能と呼びます。この特別なモードは、EditTextなどのテキスト入力を受け取るウィジェット、またはフィルタリングが有効な場合はListView向けに作成されました。

...

タッチモードでフォーカス可能なのは、コードまたはXMLから自分で設定できるプロパティです。ただし、Androidの通常の動作との整合性を損なうため、非常に特殊な状況でのみ慎重に使用する必要があります。ゲームは、フォーカス可能タッチモードプロパティをうまく利用できるアプリケーションの良い例です。 MapViewをGoogleマップのようにフルスクリーンで使用する場合、タッチモードでフォーカス可能を正しく使用できる別の良い例です。

64
Apfelsaft

例を挙げて詳細に説明してください

私にあなた自身の経験を与えます:

多数のImageButtonsを使用したアクティビティを備えたGoogle TVアプリケーションがありました。

ImageButtonsを選択可能にしたかった。

したがって、ユーザーがマウスまたはリモートコントローラーでそれらをクリックすると、それらは選択された状態になります(私の場合は強調表示されています)。その後、ユーザーが選択したImageButtonを押すと、アクションがトリガーされます。 この正確な動作は、XMLレイアウトでfocusableInTouchModeプロパティを有効にすることで達成されました。

私がしなければならなかったのは、ImageButtonsと出来上がりのために普通のonClickListenerを設定することだけでした!

携帯電話でアプリケーションをチェックしていませんが、おなじみの結果が得られると思います。

編集

いつ?

私がテストしたユースケースをお伝えしました:最初にonClickListenerをクリックして選択した後、2回目のクリックでボタンのButtonにアクションをトリガーさせたい場合。

最初のクリックを使用して「フォーカス」を獲得し、ボタンにズームインスケールアップアニメーションを表示しました。

どうやって?

XMLレイアウトファイルでボタンのプロパティfocusableInTouchModetrueに設定するだけです。

9
Behnam

フォーカスはビューの状態であり、一般的にトラックボールとdpadでフォーカスを変更できます。状態がフォーカスされると、ビューの背景が異なる場合があります。

タッチモードでフォーカス可能にすると、ユーザーがビューに触れたときにビューがフォーカスを取得できます。この種のコンポーネントの良い例はEditTextです。

Buttonまたはクリック可能なコンポーネントが押された状態は通常、興味のあるものです。

5
Niko

ユーザーは、ハードウェアキーまたはボタンを使用するか、画面に触れることにより、デバイスと対話できます。画面に触れると、デバイスがタッチモードになります。ユーザーは、画面上の仮想ボタン、画像などに触れることで、操作することができます。

デバイスがタッチモードかどうかを確認するには、Viewクラスの isInTouchMode() メソッドを呼び出します。

3
M_ Fa