프로그래밍 방식으로 SearchView를 열려면 어떻게합니까?


102

'SearchView'라는 ActionBar 용 위젯이 있습니다. 사용하지 않는 경우 다음과 같이 표시됩니다.

여기에 이미지 설명 입력

사용중인 경우 다음과 같이 표시됩니다.

여기에 이미지 설명 입력

나는 (물론 프로그래밍 방식으로) searchview를 열기를 원한다 ( "사용중"으로 만든다).

다음과 같은 여러 기능을 시도했습니다.

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

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

하지만 그 어느 것도 효과가 없었습니다 ...

XML의 SearchView :

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

답변:


255

를 확장 SearchView하여

searchView.setIconified(false);

그리고 그것을 축소

searchView.setIconified(true);

의 값을 android:showAsAction에서 ifRoom|collapseActionView로 변경해야 합니다 always. SearchView의 속성은 android:iconifiedByDefault해야한다 true, 기본값 인, 그렇지 않으면 사용자가 축소 할 수없는 SearchView프로그래밍 방식으로 확장 된 후.


15
안녕하세요, 키보드가 팝업되지만 SearchView가 열리지 않습니다.
Eli Revah

1
안녕하세요, 이것도 작동하지 않았습니다. XML 소스 코드로 게시물을 업데이트했습니다.
Eli Revah

7
Man you are my f * king hero
Eliseo Ocampos jul.

1
showAsAction는 = "항상"회전 후 추한 전체 화면의 검색 창 불구하고, 표시됩니다
프란체스코 Gabbrielli

1
showAsAction="always"확장시 검색 아이콘이 작업 표시 줄에 유지되도록합니다. 이는 검색에 수동으로 초점을 맞출 때의 모양과 유사하지 않습니다.
Ixx

74

전화 해봐 expandActionView()ActionView에서 onActionViewExpanded ()가 아닌 MenuItem .

그것은 나를 위해 작동합니다.

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

10
완벽하게 작동하지만 API> 14에서만 작동합니다. 이전 API의 경우 다음을 사용할 수 있습니다. MenuItemCompat.expandActionView (searchMenuItem);
Andrei Aulaska 2014 년

이것이 올바른 솔루션입니다. 선택한 솔루션을 설정 showAsAction: always하면 일부 문제가 발생합니다.
Ixx

13

필요한 경우에만 지원 라이브러리를 사용하려면 다음을 수행하십시오.

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

그렇지 않으면 간단히

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

6

늦었다는 건 알지만

expandActionView ()를 호출하여 열고, collapseActionView ()를 호출하여 닫으십시오. getActionView ()를 통해 실제 Action View에서 requestFocus ()를 호출하여 검색 뷰 포커스를 제공 할 수 있습니다. :)


1

Matthias Robberts의 답변 확장 :

목록 조각이 검색 값을 유지하고 사용자가 다른 조각에서 돌아온 후에 설정하기를 원했습니다.

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

그리고 메뉴의 always|collapseActionView경우 유지합니다 . 그렇지 않으면 사용자가 텍스트를 삭제할 때 열려 있습니다.


0

결국 searchView유지 를 열려면 close_button이것을 사용하십시오 onCreate:-

searchView.findViewById(R.id.search_button).performClick();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.