Người dùng tương tác với giao diện đồ họa của ứng dụng Android dưới 2 mức độ: mức Activity và mức View. Ở mức Activity, lớp Activity cần nạp chồng các phương thức tương ứng được định nghĩa sẵn. Một số phương thức như vậy có thể kể đến như:
➤ onKeyDown – được gọi khi một phím được nhấn xuống và sự kiện này chưa được xử lý bởi bất cứ view con nào trong activty
➤ onKeyUp – được gọi khi một phím được nhả ra và sự kiện này chưa được xử lý bởi bất cứ view con nào trong activty
➤ onMenuItemSelected – được gọi khi người dùng lựa chọn một item trong menu đang được mở ra
➤ onMenuOpened – được gọi khi một trình đơn được mở ra.
Nạp chồng hàm xử lý sự kiện của Activity
Ví dụ:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_CENTER: Toast.makeText(getBaseContext(), "Center was clicked", Toast.LENGTH_LONG).show(); break;
case KeyEvent.KEYCODE_DPAD_LEFT: Toast.makeText(getBaseContext(), "Left arrow was clicked", Toast.LENGTH_LONG).show(); break;
case KeyEvent.KEYCODE_DPAD_RIGHT: Toast.makeText(getBaseContext(), "Right arrow was clicked", Toast.LENGTH_LONG).show(); break;
case KeyEvent.KEYCODE_DPAD_UP:
Toast.makeText(getBaseContext(), "Up arrow was clicked", Toast.LENGTH_LONG).show(); break;
case KeyEvent.KEYCODE_DPAD_DOWN: Toast.makeText(getBaseContext(), "Down arrow was clicked", Toast.LENGTH_LONG).show(); break;
}
return false; }
Đăng ký sự kiện cho từng View
Mỗi view trong Android có thể sinh ra các sự kiện khi người dùng tác động lên nó. Ví dụ nút bấm sinh ra sự kiện onClick khi người dùng bấm vào nó, EditText sinh ra sự kiện onFocusChange khi nhận focus (người dùng bấm vào ô nhập liệu này) hoặc mất focus (khi view khác nhận focus).
Để đăng ký sự kiện tương tác với các view, ta có thể sử dụng “lớp không tên” (anonymous class) như ví dụ dưới đây:
Button btn1 = (Button)findViewById(R.id.btn1); btn1.setOnClickListener(btnListener);
và:
//---create an anonymous class to act as a button click listener--- private OnClickListener btnListener = new OnClickListener()
{
public void onClick(View v) {
Toast.makeText(getBaseContext(),
((Button) v).getText() + " was clicked", Toast.LENGTH_LONG).show();
} };
Hoặc sử dụng hàm nội bộ không tên (anonymous inner class) như sau:
//---create an anonymous inner class to act as an onfocus listener--- EditText txt1 = (EditText)findViewById(R.id.txt1);
txt1.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) { Toast.makeText(getBaseContext(),
((EditText) v).getId() + " has focus - " + hasFocus, Toast.LENGTH_LONG).show();
} });
Phát triển ứng dụng cho thiết bị di động Hồ Thị Thảo Trang
102
Chương 5. Thiết kế giao diện người dùng với các View cơ bản
Trong chương trước, chúng ta đã làm quen với các loại viewgroup trong Android và cách sử dụng chúng để sắp xếp các view con trong activity. Trong chương này ta sẽ làm quen với các loại view dùng để tạo nên giao diện đồ họa cho ứng dụng: các nút bấm, chữ, hình ảnh, danh sách…