Toolbar
của thư viện AndroidX cung cấp cho người dùng nhiều cách để tương tác với ứng dụng. Thêm và xử lý các 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 2 thành phần linh hoạt:
- Chế độ xem hành động là một hành động cung cấp chức năng phong phú trong thanh ứng dụng. Ví dụ: khung 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 phải thay đổi các 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. Hành động ban đầu xuất hiện dưới dạng một nút hoặc một mục trong trình đơn; khi người dùng nhấn vào hành động đó, trì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 mà bạn xác định. Ví dụ: trình cung cấp hành động có thể phản hồi một lượt nhấn bằng cách hiển thị một trình đơn.
AndroidX cung cấp một số tiện ích trình cung cấp thao tác và khung hiển thị thao tác chuyên biệt. Ví dụ: tiện ích SearchView
triển khai khung hiển thị hành động để 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ị hành động và trình cung cấp hành động của riêng mình.
Thêm chế độ xem hành động
Để thêm khung 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 tiện ích giúp triển khai hành độngactionLayout
: một 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 chế độ xem hành động, chế độ xem này sẽ mở rộng để lấp đầy thanh ứng dụng.
Ví dụ: Mã sau đây 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, ứ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ó không gian trong thanh ứng dụng, ứng dụng sẽ thêm thao tác này 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 trong 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 thao tác đó, 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 thông tin tham chiếu đối tượng của khung hiển thị hành động bằng cách gọi phương thức getActionView()
. Ví dụ: mã sau đây lấy tham chiếu đối tượng cho tiện ích SearchView
được xác định trong ví dụ về mã ở trên:
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 với tính năng mở rộng chế độ xem hành động
Nếu phần tử <item>
của hành động có cờ collapseActionView
, thì ứng dụng sẽ hiển thị chế độ xem hành động dưới dạng biểu tượng cho đến khi người dùng tương tác với chế độ xem hành động đó. Khi người dùng nhấn vào biểu tượng đó, trình xử lý tích hợp cho onOptionsItemSelected()
sẽ mở rộng khung hiển thị hành động. Nếu lớp con hoạt động ghi đè phương thức onOptionsItemSelected()
, thì phương thức ghi đè của bạn phải gọi super.onOptionsItemSelected()
để lớp cấp cao có thể mở rộng khung hiển thị hành động.
Nếu muốn thực hiện một thao tác nào đó khi thao tá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à chuyển một thành phầ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 khung hiển thị hành động được mở rộng hay thu gọn. Đoạn mã sau đây cho biết cách xác định và truyền một 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 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 thuộc tính actionProviderClass
và đặ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 dùng một thao tác tuỳ chỉnh, hãy khai báo 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 một trình cung cấp thao tác tuỳ chỉnh.