Làm cách nào để mở Chế độ xem tìm kiếm theo chương trình?


102

Có tiện ích này cho Thanh hành động được gọi là 'Chế độ xem tìm kiếm'. Khi nó không được sử dụng, nó trông như thế này:

nhập mô tả hình ảnh ở đây

Và khi nó được sử dụng, nó trông như thế này:

nhập mô tả hình ảnh ở đây

Tôi muốn (tất nhiên là theo chương trình) để mở chế độ xem tìm kiếm (đặt nó ở chế độ "đang sử dụng").

Tôi đã thử một số chức năng như:

SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
    searchView.setOnQueryTextListener(this);

    searchView.performClick();
    searchView.requestFocus();

Nhưng không ai trong số đó hoạt động ...

Chế độ xem Tìm kiếm trong XML:

<item android:id="@+id/menu_search"
      android:title="Search"
      android:icon="@drawable/ic_action_search"
      android:showAsAction="ifRoom|collapseActionView"
      android:actionViewClass="android.widget.SearchView" />

Câu trả lời:


255

Mở rộng SearchViewvới

searchView.setIconified(false);

và thu gọn nó bằng

searchView.setIconified(true);

Bạn cần thay đổi giá trị của android:showAsActiontừ ifRoom|collapseActionViewthành always. Các SearchViewthuộc tính 's android:iconifiedByDefaultnên true, đó là giá trị mặc định, nếu không người dùng không có thể thu gọn SearchViewsau khi nó đã được mở rộng lập trình.


15
Xin chào, bàn phím bật lên nhưng Chế độ xem tìm kiếm không mở.
Eli Revah

1
Xin chào, điều này cũng không hoạt động. Tôi đã cập nhật bài đăng bằng mã nguồn XML.
Eli Revah

7
Man bạn là f * anh hùng vua của tôi
Eliseo Ocampos

1
showAsAction = "always" sẽ hiển thị một thanh xấu xí tìm kiếm toàn màn hình tuy nhiên, sau khi luân chuyển
Francesco Gabbrielli

1
showAsAction="always"làm cho biểu tượng tìm kiếm ở trên thanh tác vụ khi được mở rộng, biểu tượng này không giống với biểu tượng khi tập trung tìm kiếm theo cách thủ công.
Ixx

74

Cố gắng gọi expandActionView()trên MenuItem, không phải onActionViewExpanded () trên ActionView.

Nó làm việc cho tôi.

MenuItem searchMenuItem = menu.findItem(R.id.menu_search);
searchView = (SearchView) searchMenuItem.getActionView();
searchMenuItem.expandActionView();

10
Hoạt động hoàn hảo, nhưng chỉ dành cho API> 14. Đối với API cũ hơn, bạn có thể sử dụng cái này: MenuItemCompat.expandActionView (searchMenuItem);
Andrei Aulaska

Đây là giải pháp chính xác - Giải pháp đã chọn buộc bạn phải đặt showAsAction: alwaysđiều này gây ra một số vấn đề.
Ixx

13

Nếu bạn chỉ muốn sử dụng thư viện hỗ trợ khi cần thiết, hãy làm điều này

    MenuItem searchMenuItem = menu.findItem(R.id.action_search);
    if (Utils.hasIceCreamSandwich())
        searchMenuItem.expandActionView();
    else MenuItemCompat.expandActionView(searchMenuItem);

người khác chỉ cần làm điều này

    MenuItem searchMenuItem = menu.findItem(R.id.action_search);
    MenuItemCompat.expandActionView(searchMenuItem);

6

Tôi biết điều này là muộn nhưng

Hãy thử gọi expandActionView () để mở và sậpActionView () để đóng. Bạn có thể gọi requestFocus () trên Chế độ xem hành động thực tế thông qua getActionView () để tạo tiêu điểm cho chế độ xem tìm kiếm :)


1

Mở rộng câu trả lời của Matthias Robberts:

Tôi muốn một phân đoạn danh sách để giữ giá trị tìm kiếm của nó và đặt nó sau khi người dùng quay lại từ phân đoạn khác.

if (myViewModel.filterTextSaved.isNotEmpty()) { // Kotlin, storing state in ViewModel
    searchItem.expandActionView() // needs to come first, otherwise empty text
    theTextArea.setText(courseViewModel.filterTextOnClick)
}

và đối với menu tôi giữ always|collapseActionView, nếu không, nó vẫn mở khi người dùng xóa văn bản.


0

Để mở ra một sự searchViewduy trì close_buttoncuối cùng, hãy sử dụng điều này trong onCreate: -

searchView.findViewById(R.id.search_button).performClick();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.