Android-event-handling
Android-イベント処理
'_*イベントは、アプリケーションのインタラクティブなコンポーネントとのユーザーの相互作用に関するデータを収集するための便利な方法です。*ボタンの押下や画面のタッチなど。 Androidフレームワークは、イベントキューを先入れ先出し(FIFO)ベースとして維持します。 プログラムでこれらのイベントをキャプチャし、要件に従って適切なアクションを実行できます。_
Androidイベント管理に関連する次の3つの概念があります-
- イベントリスナー-イベントリスナーは、単一のコールバックメソッドを含むViewクラスのインターフェイスです。 これらのメソッドは、リスナーが登録されているビューがUI内のアイテムとのユーザーの対話によってトリガーされると、Androidフレームワークによって呼び出されます。
- イベントリスナーの登録-イベント登録は、イベントハンドラーがイベントリスナーに登録され、イベントリスナーがイベントを発生させたときにハンドラーが呼び出されるプロセスです。
- イベントハンドラ-イベントが発生し、イベントのイベントリスナーを登録すると、イベントリスナーはイベントハンドラを呼び出します。これは、実際にイベントを処理するメソッドです。
イベントリスナーとイベントハンドラー
Event Handler | Event Listener & Description |
---|---|
onClick() |
OnClickListener() これは、ユーザーがボタン、テキスト、画像などのウィジェットをクリック、タッチ、またはフォーカスしたときに呼び出されます。 onClick()イベントハンドラを使用して、このようなイベントを処理します。 |
onLongClick() |
OnLongClickListener() これは、ユーザーがボタン、テキスト、画像などのウィジェットをクリック、タッチ、またはフォーカスしたときに呼び出されます。 1秒以上。 onLongClick()イベントハンドラを使用して、このようなイベントを処理します。 |
onFocusChange() |
OnFocusChangeListener() これは、ウィジェットがフォーカスを失うときに呼び出されます。 ユーザーはビュー項目から離れます。 onFocusChange()イベントハンドラを使用して、このようなイベントを処理します。 |
onKey() |
OnFocusChangeListener() これは、ユーザーがアイテムに焦点を合わせ、デバイスのハードウェアキーを押すか放したときに呼び出されます。 onKey()イベントハンドラを使用して、このようなイベントを処理します。 |
onTouch() |
OnTouchListener() これは、ユーザーがキーを押したとき、キーを離したとき、または画面上の任意の移動ジェスチャーで呼び出されます。 onTouch()イベントハンドラを使用して、このようなイベントを処理します。 |
onMenuItemClick() |
OnMenuItemClickListener() ユーザーがメニュー項目を選択すると呼び出されます。 onMenuItemClick()イベントハンドラを使用して、このようなイベントを処理します。 |
onCreateContextMenu() |
onCreateContextMenuItemListener() これは、コンテキストメニューが構築されているときに呼び出されます(持続的な「ロングクリックの結果」) |
OnHoverListener、OnDragListenerなど、アプリケーションに必要な View クラスの一部として、さらに多くのイベントリスナーを使用できます。 そのため、洗練されたアプリを開発する場合に備えて、Androidアプリケーション開発の公式ドキュメントを参照することをお勧めします。
イベントリスナーの登録
イベント登録は、イベントハンドラーがイベントリスナーに登録され、イベントリスナーがイベントを発生させたときにハンドラーが呼び出されるプロセスです。 イベントリスナーをイベントに登録するにはいくつかのトリッキーな方法がありますが、ここでは上位3つの方法のみをリストします。そのうち3つは状況に応じて使用できます。
- 匿名の内部クラスを使用する
- アクティビティクラスは、Listenerインターフェイスを実装します。
- レイアウトファイルactivity_main.xmlを使用して、イベントハンドラーを直接指定します。
以下のセクションでは、3つのシナリオすべての詳細な例を示します-
タッチモード
ユーザーは、ハードウェアキーまたはボタンを使用するか、画面に触れることでデバイスと対話できます。画面に触れると、デバイスがタッチモードになります。 ユーザーは、画面上の仮想ボタンや画像などに触れることで操作できます。ViewクラスのisInTouchMode()メソッドを呼び出すと、デバイスがタッチモードになっているかどうかを確認できます。
フォーカス
ビューまたはウィジェットは通常、強調表示されているか、フォーカスが合っているときに点滅するカーソルを表示します。 これは、ユーザーからの入力を受け入れる準備ができていることを示しています。
- * isFocusable()*-trueまたはfalseを返します
- * isFocusableInTouchMode()*-ビューがタッチモードでフォーカス可能かどうかを確認します。 (ハードウェアキーを使用するとビューがフォーカス可能になる場合がありますが、デバイスがタッチモードの場合はフォーカスできません)
onTouchEvent()
イベント処理の例
匿名内部クラスを使用したイベントリスナーの登録
ここでは、リスナーの匿名実装を作成します。各クラスが単一のコントロールにのみ適用され、イベントハンドラーに引数を渡す利点がある場合に役立ちます。 このアプローチでは、イベントハンドラーメソッドはActivityのプライベートデータにアクセスできます。 Activityを呼び出すための参照は必要ありません。
ただし、ハンドラーを複数のコントロールに適用した場合、ハンドラーのコードをカットアンドペーストする必要があり、ハンドラーのコードが長い場合、コードの保守が難しくなります。
次に、個別のListenerクラスを使用してクリックイベントを登録およびキャプチャする方法を示す簡単な手順を示します。 同様に、他の必要なイベントタイプのリスナーを実装できます。
Step | Description |
---|---|
1 | You will use Android studio IDE to create an Android application and name it as myapplication under a package com.example.myapplication as explained in the Hello World Example chapter. |
2 | Modify src/MainActivity.java file to add click event listeners and handlers for the two buttons defined. |
3 | Modify the detault content of res/layout/activity_main.xml file to include Android UI controls. |
4 | No need to declare default string constants.Android studio takes care default constants. |
5 | Run the application to launch Android emulator and verify the result of the changes done in the aplication. |
以下は、変更されたメインアクティビティファイル src/com.example.myapplication/MainActivity.java の内容です。 このファイルには、基本的な各ライフサイクルメソッドを含めることができます。
以下は res/layout/activity_main.xml ファイルの内容です-
'_ここにabcはfinddevguidesロゴについて示しています_
以下は、2つの新しい定数を定義する res/values/strings.xml の内容です-
以下は、 AndroidManifest.xml のデフォルトのコンテンツです-
ここで、2つのボタンを1つずつクリックしてみると、登録されたクリックイベントハンドラーメソッドが各クリックイベントに対して呼び出されているため、 Hello World テキストのフォントが変更されることがわかります。
運動
さまざまなイベントタイプに対してさまざまなイベントハンドラを作成し、さまざまなイベントタイプとその処理の正確な違いを理解することをお勧めします。 メニュー、スピナー、ピッカーウィジェットに関連するイベントはほとんど異なりませんが、上記で説明したものと同じ概念に基づいています。