1. Trang chủ
  2. » Thể loại khác

xu ly su kien trong android

6 155 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 6
Dung lượng 254,09 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Xử lý sự kiện Event Handling trong Android Các sự kiện Event là một cách hữu ích để thu thập dữ liệu về tương tác của người dùng với các thành phần tương tác của ứng dụng.. Các phương th

Trang 1

Xử lý sự kiện (Event Handling) trong Android

Các sự kiện (Event) là một cách hữu ích để thu thập dữ liệu về tương tác của người dùng với các thành phần tương tác của ứng dụng Ví dụ như sự kiện nhấn vào nút hoặc chạm vào màn hình, … Android Framework duy trì một dãy sự hiện dựa trên nền tảng là First-In, First-out (FIFO) Bạn có thể nắm bắt các sự kiện này trong chương trình và thực hiện hành đồng thích hợp tùy theo yêu cầu

Liên quan tới Quản lý sự kiện trong Android, bạn cần quan tâm 3 khái niệm sau: −

Event Listeners − Một Even Listener là một Interface trong lớp View mà chứa một

phương thức callback Các phương thức này sẽ có thể được gọi bởi Android Framework khi Listener đã đăng ký được kích hoạt bởi tương tác của người dùng với item trong giao diện UI

Event Listeners Registration − Event Registration là tiến trình mà bởi đó một

Event Handler được đăng ký với một Event Listener để mà Handler này được gọi khi Event Listener kích hoạt sự kiện

Event Handlers − Khi một Event xảy ra, và chúng ta đã đăng ký một Event Listener

cho sự kiện, thì Event Listener gọi Event Handler, là phương thức mà thực sự xử lý

sự kiện đó

Event Listeners & Event Handlers

Event Handler Event Listener & Miêu tả

onClick() OnClickListener()

Được gọi khi người dùng hoặc nhấn hoặc chạm hoặc tập trung vào bất cứ widget nào như button, text, image Bạn sẽ sử dụng event handler là onClick() để xử lý sự kiện như thế

onLongClick() OnLongClickListener()

Được gọi khi người dùng hoặc nhấn hoặc chạm vào bất cứ widget nào như button, text, image trong một hoặc vài giây Bạn sẽ sử

Trang 2

dụng event handler là onLongClick() để xử lý sự kiện như thế

onFocusChange() OnFocusChangeListener()

Được gọi khi widget mất tiêu điểm của nó, ví dụ như người dùng rời khỏi item trên view Bạn sẽ sử dụng event handler là onFocusChange() để xử lý các sự kiện như thế

onKey() OnFocusChangeListener()

Được gọi khi người dùng tập trung vào item và nhấn hoặc thả ra một phím cứng trên thiết bị Bạn sẽ sử dụng event handler là onKey() để xử lý sự kiện như thế

onTouch() OnTouchListener()

Được gọi khi người dùng nhấn key, nhả phím hoặc bất cứ động tác nào trên màn hình Bạn sẽ sử dụng event handler là onTouch()

để xử lý sự kiện như thế

onMenuItemClick() OnMenuItemClickListener()

Được gọi khi người dùng lựa chọn một item trong menu Bạn sẽ

sử dụng event handler là onMenuItemClick() để xử lý sự kiện như thế

onCreateContextMenu() onCreateContextMenuItemListener()

Được gọi khi context menu đang được xây dựng (là kết quả của một click liên tục trong thời gian dài)

Ngoài ra còn có nhiều Event Listener có sẵn như là một phần của lớp View như OnHoverListener, OnDragLister, … có thể cần cho ứng dụng của bạn Vì thế, tôi đề nghị bạn nên tham khảo Offical Documentation để phát triển các ứng dụng Android phức tạp và tinh vi hơn

Đăng ký Event Listener trong Android

Đăng ký Event là tiến trình mà bởi đó một Event Handler được đăng ký với một Event Listener để mà handler được gọi khi Event Listener kích hoạt sự kiện Mặc dùy có một số

Trang 3

cách phức tạp để đăng ký Event Handler của bạn cho bất kỳ sự kiện nào, nhưng tôi liệt kê chỉ 3 cách và bạn có thể sử dụng tùy theo tình huống

• Sử dụng một lớp Inner nặc danh

• Lớp Activity triển khai Listener Interface

• Sử dụng layout file là activity_main.xml để xác định trực tiếp Event Handler

Phần dưới sẽ cung cấp cho bạn ví dụ chi tiết về 3 cách này −

Touch Mode

Người sử dụng có thể tương tác với các thiết bị của họ bởi sử dụng các phím cứng hoặc nút hoặc chạm vào màn hình Việc chạm vào màn hình đặt thiết bị vào trong Touch Mode Sau đó, người dùng có thể tương tác với nó bằng việc chạm vào các nút ảo, hình ảnh, … Bạn có thể kiểm tra nếu thiết bị là trong Touch Mode bằng việc gọi phương thức isInTouchMode() của lớp View

TOUCH EVENT

Sự kiện Focus trong Android

Một view hoặc widget thường được làm nổi bật hoặc hiển thị một con trỏ nhấp nháy khi nó trong Focus Điều này chỉ rằng nó sẵn sàng để chấp nhận đầu vào từ người dùng

isFocusable()Nó trả về true hoặc false

isFocusableInTouchMode() Kiểm tra để biết nếu view là focusable trong Touch

Mode (Một view là focusable khi sử dụng một phím cứng nhưng không là focusable khi thiết bị là trong Touch Mode)

android : foucsUp = "@=id/button_l"

onTouchEvent()

public boolean onTouchEvent ( motionEvent event ){ switch ( event getAction ()){

case TOUCH_DOWN : Toast makeText ( this , "you have clicked down Touch

button" , Toast LENTH_LONG ) show (); break (); case TOUCH_UP : Toast makeText ( this , "you have clicked up touch

button" , Toast LENTH_LONG ) show (); break ; case TOUCH_MOVE : Toast makeText ( this , "you have clicked move touch

button" Toast LENTH_LONG ) show (); break ; } return

super onTouchEvent ( event ) ; }

Trang 4

Phương thức onTouchEvent()

Ví dụ về xử lý sự kiện trong Android

Ở đây, bạn sẽ tạo một trình triển khai nặc danh của Listener và sẽ là hữu ích nếu mỗi lớp

được áp dụng một control và bạn phải truyền các tham số cho Event Handler Trong hướng

tiếp cận này, các phương thức xử lý sự kiện có thể truy cập dữ liệu private của Activity

Không cần bất cứ tham chiếu nào để gọi Activity

Nhưng nếu bạn áp dụng Handler cho nhiều hơn một control, bạn sẽ phải cắt và dán code

cho Handler đó và nếu code cho Handler là dài, nó làm việc duy trì code trở nên khó khăn

hơn

Sau đây là các bước đơn giản để minh họa cách chúng ta sử dụng lớp Listener riêng rẽ để

đăng ký và nắm bắt click event Theo cách tương tự, bạn có thể triển khai Listener của bạn

cho bất cứ kiểu sự kiện nào

Sau đây là nội dung của Main Activity file đã được sửa

đổi:src/com.example.myapplication/MainActivity.java

package com example myapplication ; public class MainActivity extends

ActionBarActivity private ProgressDialog progress ; Button b1 , b2 ;

@Override protected void onCreate ( Bundle savedInstanceState ) {

super onCreate ( savedInstanceState );

setContentView ( layout activity_main ); progress = new

ProgressDialog ( this ); b1 =( Button ) findViewById ( id button );

b2 =( Button ) findViewById ( id button2 ); b1 setOnClickListener ( new

View OnClickListener () @Override public void onClick ( View

v TextView txtView = ( TextView ) findViewById ( id textView ); txtView setTextSize ( 25 ); } });

b2 setOnClickListener ( new View OnClickListener () @Override

public void onClick ( View v ) { TextView txtView = ( TextView )

findViewById ( id textView ); txtView setTextSize ( 55 ); } }); } @Override public boolean onCreateOptionsMenu ( Menu menu ) {

getMenuInflater () inflate ( menu menu_main , menu ); return true ; }

@Override public boolean onOptionsItemSelected ( MenuItem item ) { //

activity in AndroidManifest.xml int id = item getItemId ();

//noinspection SimplifiableIfStatement if id == R id action_settings ) {

return true ; } return super onOptionsItemSelected ( item ); } }

Sau đây là nội dung của res/layout/activity_main.xml file −

Trang 5

<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"

xmlns:tools = "http://schemas.android.com/tools"

android:layout_width = "match_parent" android:layout_height = "match_parent"

android:paddingBottom = "@dimen/activity_vertical_margin"

android:paddingLeft = "@dimen/activity_horizontal_margin"

android:paddingRight = "@dimen/activity_horizontal_margin"

android:paddingTop = "@dimen/activity_vertical_margin"

tools:context = ".MainActivity" > <TextView

android:id = "@+id/textView1" android:layout_width = "wrap_content"

android:layout_height = "wrap_content" android:text = "Event Handling " android:layout_alignParentTop = "true"

android:layout_centerHorizontal = "true" android:textSize = "30dp" />

<TextView android:id = "@+id/textView2"

android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "Tutorials point " android:textColor = "#ff87ff09"

android:textSize = "30dp" android:layout_above = "@+id/imageButton"

android:layout_centerHorizontal = "true" android:layout_marginBottom = "40dp"

/> <ImageButton android:layout_width = "wrap_content"

android:layout_height = "wrap_content" android:id = "@+id/imageButton"

android:src = "@drawable/abc" android:layout_centerVertical = "true"

android:layout_centerHorizontal = "true" /> <Button

android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "Small font" android:id = "@+id/button"

android:layout_below = "@+id/imageButton"

android:layout_centerHorizontal = "true" /> <Button

android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "Large Font" android:id = "@+id/button2"

android:layout_below = "@+id/button"

android:layout_alignRight = "@+id/button"

android:layout_alignEnd = "@+id/button" /> <TextView

android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "Hello World!" android:id = "@+id/textView"

android:layout_below = "@+id/button2"

android:layout_centerHorizontal = "true" android:textSize = "25dp" />

</RelativeLayout>

Sau đây là nội dung của res/values/strings.xml để định nghĩa hai hằng −

<? xml version = "1.0" encoding = "utf-8" ?> <resources> <string

name = "app_name" > myapplication </string> <string

name = "action_settings" > Settings </string> </resources>

Sau đây là nội dung mặc định của AndroidManifest.xml −

<? xml version = "1.0" encoding = "utf-8" ?> <manifest

xmlns:android = "http://schemas.android.com/apk/res/android"

package = "com.example.myapplication" android:versionCode = "1"

android:versionName = "1.0" <uses-sdk android:minSdkVersion = "8" android:targetSdkVersion = "22" /> <application

android:allowBackup = "true" android:icon = "@drawable/ic_launcher"

android:label = "@string/app_name" android:theme = "@style/AppTheme"

Trang 6

<activity android:name = "com.example.myapplication.MainActivity"

android:label = "@string/app_name" <intent-filter>

<action android:name = "android.intent.action.MAIN" /> <category

android:name = "android.intent.category.LAUNCHER" /> </intent-filter>

</activity> </application> </manifest>

Cuối cùng, bạn chạy ứng dụng Android vừa tạo ở trên

Ngày đăng: 02/12/2017, 07:17

TỪ KHÓA LIÊN QUAN

w