Thanh ứng dụng cho phép bạn thêm các nút cho thao tác của người dùng. Tính năng này cho phép bạn đặt những hành động quan trọng nhất cho bối cảnh hiện tại ở đầu ứng dụng. Ví dụ: một ứng dụng duyệt ảnh có thể hiện các nút chia sẻ và tạo album ở đầu khi người dùng đang xem cuộn ảnh của họ. Khi người dùng xem một bức ảnh riêng lẻ, ứng dụng có thể hiện các nút cắt và bộ lọc.
Thanh ứng dụng có giới hạn về không gian. Nếu một ứng dụng khai báo nhiều thao tác hơn số lượng có thể vừa với thanh ứng dụng, thì thanh ứng dụng sẽ gửi các thao tác dư thừa vào trình đơn tràn. Ứng dụng cũng có thể chỉ định rằng một thao tác luôn xuất hiện trong trình đơn mục bổ sung, thay vì hiển thị trên thanh ứng dụng.
Thêm các nút hành động
Tất cả các nút thao tác và các mục khác có trong mục bổ sung thao tác đều được xác định trong một tài nguyên trình đơn XML. Để thêm các thao tác vào thanh thao tác, hãy tạo một tệp XML mới trong thư mục res/menu/ của dự án.
Thêm một phần tử <item> cho mỗi mục mà bạn muốn đưa vào thanh thao tác, như minh hoạ trong tệp XML mẫu sau đây của trình đơn:
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <!-- "Mark Favorite", must appear as action button if possible. --> <item android:id="@+id/action_favorite" android:icon="@drawable/ic_favorite_black_48dp" android:title="@string/action_favorite" app:showAsAction="ifRoom"/> <!-- Settings, must always be in the overflow. --> <item android:id="@+id/action_settings" android:title="@string/action_settings" app:showAsAction="never"/> </menu>
Thuộc tính app:showAsAction chỉ định xem thao tác có xuất hiện dưới dạng một nút trên thanh ứng dụng hay không. Nếu bạn đặt app:showAsAction="ifRoom" – như trong thao tác favorite (yêu thích) của mã ví dụ – thì thao tác này sẽ xuất hiện dưới dạng một nút nếu có đủ chỗ trong thanh ứng dụng. Nếu không có đủ không gian, các thao tác dư thừa sẽ được chuyển đến trình đơn mục bổ sung. Nếu bạn đặt app:showAsAction="never"—như trong thao tác settings (cài đặt) của mã ví dụ—thao tác này sẽ luôn xuất hiện trong trình đơn mục bổ sung và không hiển thị trên thanh ứng dụng.
Hệ thống sẽ dùng biểu tượng của thao tác làm nút thao tác nếu thao tác đó xuất hiện trong thanh ứng dụng. Bạn có thể tìm thấy nhiều biểu tượng hữu ích trong Biểu tượng Material.
Phản hồi các hành động
Khi người dùng chọn một trong các mục trên thanh ứng dụng, hệ thống sẽ gọi phương thức gọi lại onOptionsItemSelected() của hoạt động và truyền một đối tượng MenuItem để cho biết mục nào đã được nhấn. Trong quá trình triển khai onOptionsItemSelected(), hãy gọi phương thức MenuItem.getItemId() để xác định mục nào đã được nhấn. Mã nhận dạng được trả về sẽ khớp với giá trị mà bạn khai báo trong thuộc tính android:id của phần tử <item> tương ứng.
Ví dụ: đoạn mã sau đây kiểm tra xem người dùng chọn hành động nào. Nếu phương thức không nhận ra hành động của người dùng, thì phương thức đó sẽ gọi phương thức siêu lớp:
Kotlin
override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) { R.id.action_settings -> { // User chooses the "Settings" item. Show the app settings UI. true } R.id.action_favorite -> { // User chooses the "Favorite" action. Mark the current item as a // favorite. true } else -> { // The user's action isn't recognized. // Invoke the superclass to handle it. super.onOptionsItemSelected(item) } }
Java
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_settings: // User chooses the "Settings" item. Show the app settings UI. return true; case R.id.action_favorite: // User chooses the "Favorite" action. Mark the current item as a // favorite. return true; default: // The user's action isn't recognized. // Invoke the superclass to handle it. return super.onOptionsItemSelected(item); } }