Toolbar
của thư viện AndroidX cung cấp nhiều cách để người dùng tương tác với ứng dụng của bạn. Thêm và xử lý thao tác mô tả cách xác định một thao tác, có thể là một nút hoặc một mục trong trình đơn. Tài liệu này mô tả cách thêm hai thành phần linh hoạt:
- Chế độ xem thao tác là một thao tác cung cấp chức năng phong phú trong thanh ứng dụng. Ví dụ: thành phần hiển thị thao tác tìm kiếm cho phép người dùng nhập văn bản tìm kiếm vào thanh ứng dụng mà không cần thay đổi hoạt động hoặc mảnh.
- Trình cung cấp hành động là một hành động có bố cục tuỳ chỉnh riêng. Ban đầu, hành động sẽ xuất hiện dưới dạng một nút hoặc mục trong trình đơn; khi người dùng nhấn vào hành động, nhà cung cấp hành động sẽ kiểm soát hành vi của hành động theo bất kỳ cách nào bạn xác định. Ví dụ: trình cung cấp thao tác có thể phản hồi một thao tác nhấn bằng cách hiển thị trình đơn.
AndroidX cung cấp một số tiện ích chuyên biệt về chế độ xem hành động và trình cung cấp hành động. Ví dụ: tiện ích SearchView
triển khai khung hiển thị thao tác để nhập cụm từ tìm kiếm. Tiện ích ShareActionProvider
triển khai một trình cung cấp hành động để chia sẻ thông tin với các ứng dụng khác. Bạn cũng có thể xác định khung hiển thị thao tác và trình cung cấp thao tác của riêng mình.
Thêm thành phần hiển thị thao tác
Để thêm thành phần hiển thị thao tác, hãy tạo một phần tử <item>
trong tài nguyên trình đơn của thanh công cụ, như mô tả trong phần Thêm và xử lý thao tác. Thêm một trong các thuộc tính sau vào phần tử <item>
:
actionViewClass
: lớp của một tiện ích triển khai hành độngactionLayout
: tài nguyên bố cục mô tả các thành phần của thao tác
Đặt thuộc tính showAsAction
thành "ifRoom|collapseActionView"
hoặc "never|collapseActionView"
. Cờ collapseActionView
cho biết cách hiển thị tiện ích khi người dùng không tương tác với tiện ích đó. Nếu tiện ích nằm trên thanh ứng dụng, ứng dụng sẽ hiển thị tiện ích dưới dạng biểu tượng. Nếu tiện ích nằm trong trình đơn mục bổ sung, ứng dụng sẽ hiển thị tiện ích dưới dạng một mục trong trình đơn. Khi người dùng tương tác với thành phần hiển thị thao tác, thành phần này sẽ mở rộng để lấp đầy thanh ứng dụng.
Ví dụ: mã sau đây sẽ thêm tiện ích SearchView
vào thanh ứng dụng:
<item android:id="@+id/action_search" android:title="@string/action_search" android:icon="@drawable/ic_search" app:showAsAction="ifRoom|collapseActionView" app:actionViewClass="androidx.appcompat.widget.SearchView" />
Nếu người dùng không tương tác với tiện ích, thì ứng dụng sẽ hiển thị tiện ích dưới dạng biểu tượng do android:icon
chỉ định. Nếu không có chỗ trong thanh ứng dụng, ứng dụng sẽ thêm thao tác vào trình đơn mục bổ sung.
Khi người dùng nhấn vào biểu tượng hoặc mục trình đơn, tiện ích sẽ mở rộng để lấp đầy thanh công cụ, cho phép người dùng tương tác với tiện ích đó.
Nếu bạn cần định cấu hình hành động, hãy thực hiện việc này trong lệnh gọi lại onCreateOptionsMenu()
của hoạt động. Bạn có thể lấy tham chiếu đối tượng của thành phần hiển thị thao tác bằng cách gọi phương thức getActionView()
. Ví dụ: mã sau đây sẽ lấy tham chiếu đối tượng cho tiện ích SearchView
được xác định trong ví dụ về mã trước:
Kotlin
override fun onCreateOptionsMenu(menu: Menu?): Boolean { menuInflater.inflate(R.menu.main_activity_actions, menu) val searchItem = menu?.findItem(R.id.action_search) val searchView = searchItem?.actionView as SearchView // Configure the search info and add any event listeners. return super.onCreateOptionsMenu(menu) }
Java
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_activity_actions, menu); MenuItem searchItem = menu.findItem(R.id.action_search); SearchView searchView = (SearchView) searchItem.getActionView(); // Configure the search info and add any event listeners. return super.onCreateOptionsMenu(menu); }
Phản hồi việc mở rộng chế độ xem hành động
Nếu phần tử <item>
của thao tác có cờ collapseActionView
, thì ứng dụng sẽ hiển thị thành phần hiển thị thao tác dưới dạng biểu tượng cho đến khi người dùng tương tác với thành phần hiển thị thao tác đó. Khi người dùng nhấn vào biểu tượng, trình xử lý tích hợp sẵn cho onOptionsItemSelected()
sẽ mở rộng thành phần hiển thị thao tác. Nếu lớp con của hoạt động ghi đè phương thức onOptionsItemSelected()
, thì phương thức ghi đè phải gọi super.onOptionsItemSelected()
để lớp cha có thể mở rộng thành phần hiển thị thao tác.
Nếu muốn làm gì đó khi thao tác được mở rộng hoặc thu gọn, bạn có thể xác định một lớp triển khai MenuItem.OnActionExpandListener
và truyền một thành viên của lớp đó đến setOnActionExpandListener()
.
Ví dụ: bạn có thể muốn cập nhật hoạt động dựa trên việc chế độ xem thao tác được mở rộng hay thu gọn. Đoạn mã sau đây cho biết cách xác định và truyền trình nghe:
Kotlin
override fun onCreateOptionsMenu(menu: Menu?): Boolean { menuInflater.inflate(R.menu.options, menu) // Define the listener. val expandListener = object : MenuItem.OnActionExpandListener { override fun onMenuItemActionCollapse(item: MenuItem): Boolean { // Do something when the action item collapses. return true // Return true to collapse the action view. } override fun onMenuItemActionExpand(item: MenuItem): Boolean { // Do something when it expands. return true // Return true to expand the action view. } } // Get the MenuItem for the action item. val actionMenuItem = menu?.findItem(R.id.myActionItem) // Assign the listener to that action item. actionMenuItem?.setOnActionExpandListener(expandListener) // For anything else you have to do when creating the options menu, // do the following: return true }
Java
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.options, menu); // Define the listener. OnActionExpandListener expandListener = new OnActionExpandListener() { @Override public boolean onMenuItemActionCollapse(MenuItem item) { // Do something when the action item collapses. return true; // Return true to collapse action view. } @Override public boolean onMenuItemActionExpand(MenuItem item) { // Do something when it expands. return true; // Return true to expand the action view. } }; // Get the MenuItem for the action item. MenuItem actionMenuItem = menu.findItem(R.id.myActionItem); // Assign the listener to that action item. MenuItemCompat.setOnActionExpandListener(actionMenuItem, expandListener); // For anything else you have to do when creating the options menu, // do the following: return true; }
Thêm trình cung cấp hành động
Để khai báo trình cung cấp thao tác, hãy tạo phần tử <item>
trong tài nguyên trình đơn của thanh công cụ, như mô tả trong phần Thêm và xử lý thao tác. Thêm thuộc tính actionProviderClass
rồi đặt thuộc tính đó thành tên lớp đủ điều kiện cho lớp trình cung cấp hành động.
Ví dụ: mã sau đây khai báo ShareActionProvider
, đây là một tiện ích được xác định trong thư viện AndroidX cho phép ứng dụng của bạn chia sẻ dữ liệu với các ứng dụng khác:
<item android:id="@+id/action_share" android:title="@string/share" app:showAsAction="ifRoom" app:actionProviderClass="androidx.appcompat.widget.ShareActionProvider"/>
Trong trường hợp này, bạn không cần khai báo biểu tượng cho tiện ích vì ShareActionProvider
cung cấp đồ hoạ riêng. Nếu bạn đang sử dụng một hành động tuỳ chỉnh, hãy khai báo một biểu tượng.
Tài nguyên khác
- Hãy xem
ShareActionProvider
để biết ví dụ về cách thêm thao tác chia sẻ vào thanh ứng dụng trên cùng. - Hãy xem
ActionProvider
để biết thêm thông tin về cách tạo trình cung cấp hành động tuỳ chỉnh.