Phần tử của thư viện AndroidX
Toolbar
cung cấp
các cách khác nhau để người dùng tương tác với ứng dụng của bạn.
Phần Thêm và xử lý các thao tác mô tả cách
xác định một hành động, 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:
- Lượt xem thao tác là một thao tác cung cấp chức năng phong phú trong thanh ứng dụng. Cho Ví dụ: chế độ xem hành động 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 phải để thay đổi hoạt động hoặc mảnh.
- Trình cung cấp thao tác 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 nút hoặc mục trong trình đơn; khi người dùng nhấn vào thao tác đó, trình cung cấp thao tác sẽ kiểm soát hành vi của thao tác theo bất cứ 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 nhấn bằng cách hiển thị một trình đơn.
AndroidX cung cấp một số tiện ích chế độ xem thao tác và trình cung cấp thao tác chuyên biệt. Ví dụ:
Tiện ích SearchView
triển khai chế độ xem hành động để nhập cụm từ tìm kiếm. Chiến lược phát hành đĩa đơn
ShareActionProvider
tiện ích triển khai trình cung cấp thao tác để 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 bạn.
Thêm chế độ xem hành động
Để thêm chế độ xem hành động, hãy tạo một
<item>
trong tài nguyên trình đơn của thanh công cụ, như được mô tả trong
Thêm và xử lý các thao tác. Hãy thêm một trong các thuộc tính sau vào
Phần tử <item>
:
actionViewClass
: lớp tiện ích giúp 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ày 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 một 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 đã chỉ định
của android:icon
. Nếu không có khoảng trống trong thanh ứng dụng, ứng dụng sẽ thêm hành động 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 mà người dùng tương tác với nó.
Nếu bạn cần định cấu hình thao tác này, hãy thực hiện trong
onCreateOptionsMenu()
. Bạn có thể lấy 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 SearchView
tiện ích được xác định trong ví dụ 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 phần mở rộng chế độ xem hành động
Nếu phần tử <item>
của thao tác có cờ collapseActionView
,
ứng dụng 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 sẵn dành cho
onOptionsItemSelected()
mở rộng chế độ xem hành động. Nếu lớp con hoạt động của bạn ghi đè
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 thao tác khi thao tác đó được mở rộng hoặc thu gọn, bạn có thể xác định một lớp
implements
MenuItem.OnActionExpandListener
,
và chuyển một thành viên của lớp đó đến
setOnActionExpandListener()
Ví dụ: bạn có thể cần cập nhật hoạt động dựa trên việc chế độ xem 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 trình đơn của thanh công cụ
như mô tả trong Thêm và xử lý các thao tác. Thêm một
actionProviderClass
và đặt thuộc tính này thành tên lớp đủ điều kiện cho giá trị
lớp trình cung cấp thao tác.
Ví dụ: Mã sau đây khai báo ShareActionProvider
, 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 đang dùng một thao tác tuỳ chỉnh,
khai báo biểu tượng.
Tài nguyên khác
- Xem
ShareActionProvider
chẳng hạn như thêm thao tác chia sẻ vào thanh ứng dụng trên cùng. - Xem
ActionProvider
cho thông tin khác về cách tạo trình cung cấp hành động tuỳ chỉnh.