Xử Lý Sự Kiện (Event Handling) Trong Android

Học Android cơ bản và nâng cao
  • Khái niệm Android cơ bản
  • Giới thiệu Android
  • Android là gì ?
  • Hướng dẫn cài đặt Android
  • Cấu trúc ứng dụng Android
  • Giới thiệu Component
  • Ví dụ Hello World
  • Giới thiệu Resource
  • Activity là gì ?
  • Service là gì ?
  • Giới thiệu Broadcast Receiver
  • Content Provider là gì ?
  • Giới thiệu Fragment
  • Intent/Filter là gì ?
  • User Interface trong Android
  • UI Layout
  • UI Control
  • Event Handling
  • Style và Theme
  • Custom Component
  • Một số khái niệm Android nâng cao
  • Drag và Drop
  • Notification
  • Location
  • Send Email
  • Send SMS
  • Phone Call
  • Publish Android Application
  • Một số ứng dụng Android tham khảo
  • Alert Dialog
  • Animation
  • Audio Capture
  • AudioManager
  • Auto Complete
  • Best Practice
  • Bluetooth
  • Camera
  • Clipboard
  • Custom Font
  • Data Backup
  • Một số Developer Tool
  • Emulator
  • Facebook Integration
  • Gesture
  • Google Map
  • Image Effect
Xử lý sự kiện (Event Handling) trong Android Trang trước Trang sau

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

Quảng cáo
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ử 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ố 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

Quảng cáo

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) ; }

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(R.layout.activity_main); progress = new ProgressDialog(this); b1=(Button)findViewById(R.id.button); b2=(Button)findViewById(R.id.button2); b1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { TextView txtView = (TextView) findViewById(R.id.textView); txtView.setTextSize(25); } }); b2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { TextView txtView = (TextView) findViewById(R.id.textView); txtView.setTextSize(55); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent 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 −

<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" > <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.

👉 Giải bài nhanh với AI Hay:

Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS. Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:

Các bạn có thể mua thêm khóa học JAVA CORE ONLINE VÀ ỨNG DỤNG cực hay, giúp các bạn vượt qua các dự án trên trường và đi thực tập Java. Khóa học có giá chỉ 300K, nhằm ưu đãi, tạo điều kiện cho sinh viên cho thể mua khóa học.

Nội dung khóa học gồm 16 chuơng và 100 video cực hay, học trực tiếp tại https://www.udemy.com/tu-tin-di-lam-voi-kien-thuc-ve-java-core-toan-tap/ Bạn nào có nhu cầu mua, inbox trực tiếp a Tuyền, cựu sinh viên Bách Khoa K53, fb: https://www.facebook.com/tuyen.vietjack

Follow facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.

Bài học Angular phổ biến tại vietjack.com:

  • AngularJs là gì

  • Directive trong AngularJs

  • Cấu trúc MVC trong AngularJS

  • Dependency Injection trong Angularjs

  • Hướng dẫn cài đặt Angularjs

  • Expression trong Angularjs

Trang trước Trang sau Bài viết liên quan
  • 160 bài học ngữ pháp tiếng Anh hay nhất

  • 155 bài học Java tiếng Việt hay nhất

  • 100 bài học Android tiếng Việt hay nhất

  • 247 bài học CSS tiếng Việt hay nhất

  • 197 thẻ HTML cơ bản

  • 297 bài học PHP

  • 101 bài học C++ hay nhất

  • 97 bài tập C++ có giải hay nhất

  • 208 bài học Javascript có giải hay nhất

Học cùng VietJack
Tài liệu giáo viên lop  1-2-3-8

Dịch vụ nổi bật:

  • Giải bài tập SGK & SBT
  • Tài liệu giáo viên
  • Sách
  • Khóa học
  • Thi online
  • Hỏi đáp

Trang web chia sẻ nội dung miễn phí dành cho người Việt.

Giải bài tập:

Lớp 1-2-3 Lớp 4 Lớp 5 Lớp 6 Lớp 7 Lớp 8 Lớp 9 Lớp 10 Lớp 11 Lớp 12 Lập trình Tiếng Anh

Chính sách

Chính sách bảo mật

Hình thức thanh toán

Chính sách đổi trả khóa học

Chính sách hủy khóa học

Tuyển dụng

Liên hệ với chúng tôi

Tầng 2, G4 - G5 Tòa nhà Five Star Garden, số 2 Kim Giang, Phường Khương Đình, Hà Nội

Phone: 084 283 45 85

Email: [email protected]

Tải nội dung trên Google Play Tải nội dung trên IOS Store

CÔNG TY TNHH ĐẦU TƯ VÀ DỊCH VỤ GIÁO DỤC VIETJACK

Người đại diện: Nguyễn Thanh Tuyền

Số giấy chứng nhận đăng ký kinh doanh: 0108307822, ngày cấp: 04/06/2018, nơi cấp: Sở Kế hoạch và Đầu tư thành phố Hà Nội.

2015 © All Rights Reserved. DMCA.com Protection Status

Từ khóa » Các Kiểu Lập Trình Sự Kiện Trong Android