SearchView
및 작업 모음은 Android 3.0 이상에서만 사용할 수 있습니다. 이전 플랫폼을 지원하려면 검색 대화상자로 돌아가세요. 검색 대화상자는 시스템에서 제공하는 UI로, 호출 시 애플리케이션 위에 오버레이됩니다.
최소 및 대상 API 수준 설정
검색 대화상자를 설정하려면 먼저 이전 기기를 지원하지만 Android 3.0 이상 버전을 타겟팅한다는 것을 매니페스트에서 선언하세요. 그러면 애플리케이션에서 자동으로 Android 3.0 이상의 경우 작업 모음, 이전 기기의 경우 기존 메뉴 시스템을 사용합니다.
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" /> <application> ...
이전 기기를 위한 검색 대화상자 제공
이전 기기에서 검색 대화상자를 호출하려면 사용자가 옵션 메뉴에서 검색 메뉴 항목을 선택할 때마다 onSearchRequested()
를 호출합니다. Android 3.0 이상 기기에서는 (첫 번째 과정에서 설명한 대로) 작업 모음에 SearchView
가 표시되므로, 사용자가 검색 메뉴 항목을 선택할 때 3.0 이전 버전에서만 onOptionsItemSelected()
를 호출합니다.
Kotlin
override fun onOptionsItemSelected(item: MenuItem): Boolean { return when (item.itemId) { R.id.search -> { onSearchRequested() true } else -> false } }
자바
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.search: onSearchRequested(); return true; default: return false; } }
런타임에 Android 빌드 버전 확인
런타임에 기기 버전을 확인하여 이전 기기에서 지원되지 않는 SearchView
를 사용하는 일이 발생하지 않도록 하세요. 다음 코드 예에서는 onCreateOptionsMenu()
메서드에서 기기 버전을 확인합니다.
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.options_menu, menu) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager (menu.findItem(R.id.search).actionView as SearchView).apply { setSearchableInfo(searchManager.getSearchableInfo(componentName)) setIconifiedByDefault(false) } } return true }
Java
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.options_menu, menu); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView(); searchView.setSearchableInfo( searchManager.getSearchableInfo(getComponentName())); searchView.setIconifiedByDefault(false); } return true; }