Trên Android, có nhiều cách để chặn các sự kiện từ tương tác của người dùng với ứng dụng. Để xem xét các sự kiện trong phạm vi giao diện người dùng, nên chụp các sự kiện từ đối tượng chế độ hiển thị cụ thể mà người dùng tương tác. Lớp chế độ hiển thị sẽ cung cấp phương tiện để thực hiện điều này. Trong số các lớp chế độ hiển thị được dùng để thiết kế bố cục, bạn sẽ thấy một số phương thức gọi lại công khai hữu ích cho các sự kiện giao diện người dùng. Các phương thức này được khung
Android gọi lại khi có hành động tương ứng xảy ra trên đối tượng đó. Chẳng hạn, khi chạm vào một chế độ hiển thị (chẳng hạn như Nút), phương thức Mặc dù trình nghe sự kiện thường được dùng để theo dõi tương tác của người dùng, sẽ có những lúc cần mở rộng lớp chế độ hiển thị để tạo thành phần tùy chỉnh. Có trường hợp cần mở rộng lớp Trình nghe sự kiệnTrình nghe sự kiện là một giao diện trong lớp Trong giao diện của trình nghe sự kiện có các phương thức gọi lại sau đây: onClick() Từ – View.OnClickListener Lệnh này được gọi khi người dùng nhấn vào mục (ở chế độ cảm ứng), hoặc đặt tiêu điểm vào mục bằng các phím điều hướng hoặc bi xoay rồi nhấn phím "enter" hoặc bi xoay.onLongClick() Từ – View.OnLongClickListener Lệnh này được gọi khi người dùng chạm và giữ mục (ở chế độ cảm ứng), hoặc đặt tiêu điểm vào mục bằng các phím điều hướng hoặc bi xoay rồi nhấn và giữ phím
"Enter" hoặc bi xoay (trong một giây).onFocusChange() Từ – View.OnFocusChangeListener Lệnh này được gọi khi người dùng di chuyển lên hoặc ra khỏi mục bằng các phím điều hướng hoặc bi xoay.onKey() Từ – View.OnKeyListener Lệnh này được gọi khi người dùng đặt tiêu điểm vào mục và nhấn hoặc nhả phím cứng trên thiết bị.onTouch() Từ – View.OnTouchListener Lệnh này được gọi khi người dùng thực hiện một thao tác chạm, bao gồm nhấn, nhả hay bất kỳ thao tác chuyển động nào trên màn hình (trong
phạm vi của mục đó).onCreateContextMenu() Từ – View.OnCreateContextMenuListener Lệnh này được gọi khi một Trình đơn ngữ cảnh đang được tạo (do một lượt "nhấp và giữ" liên tục). Xem giới thiệu về trình đơn ngữ cảnh trong hướng dẫn dành cho lập trình viên Trình đơn.Các phương thức này là những thành tố duy nhất trong giao diện tương ứng. Để xác định một phương thức và điều khiển các sự kiện, hãy triển
khai giao diện lồng nhau trong phần Hoạt động hoặc định nghĩa giao diện đó là một lớp ẩn danh. Sau đó, hãy chuyển một phiên bản triển khai sang phương thức Ví dụ sau đây minh họa cách đăng ký trình nghe theo lượt nhấp cho một Nút.
Việc triển khai trình nghe theo lượt nhấp như một phần trong Hoạt động . Điều này giúp tránh tải thêm lớp và phân bổ đối tượng. Ví dụ:
Lưu ý lệnh gọi lại
Hãy nhớ các sự kiện chính của phần cứng luôn được chuyển tới Chế độ xem hiện đang được lấy tiêu điểm. Chúng xuất phát từ đỉnh của hệ phân cấp Chế độ xem, rồi di chuyển
xuống cho tới khi đạt điểm đến thích hợp. Nếu Chế độ xem (hoặc một Chế độ xem con) hiện có tiêu điểm, bạn có thể thấy sự kiện này di chuyển qua phương thức Ngoài ra, khi xem xét việc nhập văn bản cho ứng dụng, hãy nhớ nhiều thiết bị chỉ có phương thức nhập phần mềm. Những phương thức đó không bắt buộc
phải dựa trên phím bấm; một số có thể sử dụng tính năng nhập bằng giọng nói, chữ viết tay, v.v. Ngay cả khi phương thức nhập hiển thị một giao diện giống bàn phím, phương thức đó thường cũng sẽkhông kích hoạt nhóm sự kiện Lưu ý: Trước tiên, Android sẽ gọi các trình xử lý sự kiện, tiếp đến là các trình xử lý mặc định thích hợp từ việc xác định lớp thứ hai. Theo đó, việc trả về giá trị true (đúng) từ các trình nghe sự kiện này sẽ ngừng truyền sự kiện đến các trình nghe khác và cũng sẽ chặn lệnh gọi lại đến trình xử lý sự kiện mặc định trong Chế độ xem. Vì vậy, phải chắc chắn rằng bạn muốn chấm dứt sự kiện khi trả về giá trị true (đúng). Trình xử lý sự kiệnNếu đang tạo một thành phần tùy chỉnh từ Chế độ xem, bạn có thể xác định một số phương thức gọi lại được dùng làm trình xử lý sự kiện mặc định. Trong tài liệu về Thành phần chế độ xem tùy chỉnh, có một số lệnh gọi lại phổ biến dùng để xử lý sự kiện, bao gồm:
Ngoài ra còn có một số phương thức khác bạn nên biết. Những phương thức này không thuộc lớp Chế độ hiển thị, nhưng có thể tác động trực tiếp đến cách xử lý các sự kiện. Vì vậy, khi quản lý các sự kiện phức tạp hơn bên trong một bố cục, hãy cân nhắc các phương thức sau:
Chế độ cảm ứngKhi người dùng đang thao tác trên một giao diện người dùng bằng các phím định hướng hoặc bi xoay, cần chú ý các mục thao tác (như các nút) để thấy mục nào sẽ tiếp nhận đầu vào. Tuy nhiên, nếu thiết bị có khả năng cảm ứng và người dùng bắt đầu tương tác với giao diện bằng cách chạm thì không cần đánh dấu các mục hoặc tập trung vào một Chế độ hiển thị cụ thể nữa. Do đó, có một chế độ dành cho tương tác có tên là "chế độ cảm ứng". Đối với thiết bị có khả năng cảm ứng, khi người dùng chạm vào màn hình, thiết bị sẽ chuyển sang chế độ cảm ứng. Từ thời điểm này trở đi, chỉ các Chế độ hiển thị có Bất cứ khi nào người dùng nhấn vào phím định hướng hoặc cuộn bằng bi xoay, thiết bị sẽ thoát khỏi chế độ cảm ứng và tìm một chế độ hiển thị để lấy tiêu điểm. Lúc này, người dùng có thể tiếp tục tương tác với giao diện người dùng mà không cần chạm vào màn hình. Trạng thái của chế độ cảm ứng được duy trì trên toàn bộ hệ thống (tất cả các cửa sổ và hoạt động). Để truy vấn trạng thái hiện tại, có thể gọi Xử lý tiêu điểmKhung này sẽ xử lý chuyển động tiêu điểm thường xuyên để phản hồi khi người dùng nhập liệu. Công việc này bao gồm thay đổi tiêu điểm khi Chế độ hiển bị xóa hoặc bị ẩn, hoặc khi có Chế độ hiển thị
mới. Chế độ hiển thị thể hiện trạng thái sẵn sàng lấy tiêu điểm thông qua phương thức Trên các thiết bị chạy phiên bản Android 9 (API cấp 28) trở lên, các hoạt động sẽ không chỉ định tiêu điểm ban đầu. Thay vào đó, nếu muốn, phải yêu cầu rõ tiêu điểm ban đầu. Chuyển động tiêu điểm dựa trên thuật toán tìm yếu tố lân cận gần nhất theo một hướng nhất định. Trong một số ít trường hợp, thuật toán mặc định có thể không phù hợp với hành vi mong muốn của lập trình viên. Trong các trường hợp này, bạn có thể cung cấp phần ghi đè rõ ràng bằng các thuộc tính XML sau trong tệp bố cục:nextFocusDown, nextFocusLeft, nextFocusRight và nextFocusUp. Thêm một trong các thuộc tính này vào Chế độ xem từ tiêu điểm để lại. Xác định giá trị của thuộc tính là id của Chế độ xem cho tiêu điểm cần cung cấp. Ví dụ: <LinearLayout android:orientation="vertical" ... > <Button android:id="@+id/top" android:nextFocusUp="@+id/bottom" ... /> <Button android:id="@+id/bottom" android:nextFocusDown="@+id/top" ... /> </LinearLayout> Thông thường, trong bố cục dọc này, việc di chuyển lên từ Nút đầu tiên sẽ không hiển thị ở bất cứ đâu hoặc cũng không di chuyển xuống từ Nút thứ hai. Hiện tại, Nút trên cùng đã xác định phần tử dưới cùng là nextFocusUp (và ngược lại), tiêu điểm điều hướng sẽ xoay vòng từ trên xuống dưới và từ dưới lên trên. Nếu muốn khai báo một Chế độ xem có thể lấy tiêu điểm trong giao diện người dùng (thường thì không thể) thì hãy thêm thuộc tính XML Để yêu cầu một Chế độ xem cụ thể tập trung, hãy gọi Để theo dõi các sự kiện tập
trung (được thông báo khi Chế độ xem nhận được hoặc mất tiêu điểm), hãy sử dụng |