이전 버전과의 호환성 유지
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
Compose 사용해 보기
Jetpack Compose는 Android를 위한 권장 UI 도구 키트입니다. Compose에서 검색 기능을 추가하는 방법을 알아보세요.
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;
}
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-08-23(UTC)
[null,null,["최종 업데이트: 2025-08-23(UTC)"],[],[],null,["# Remaining Backward Compatible\n\nTry the Compose way \nJetpack Compose is the recommended UI toolkit for Android. Learn how to add search functionality in Compose. \n[Filter a list →](/develop/ui/compose/quick-guides/content/filter-list-while-typing) \n\nThe [SearchView](/reference/android/widget/SearchView) and action bar are only available on Android 3.0 and\nlater. To support older platforms, you can fall back to the search dialog. The search dialog is a\nsystem provided UI that overlays on top of your application when invoked.\n\nSet Minimum and Target API levels\n---------------------------------\n\nTo setup the search dialog, first declare in your manifest that you want to support older\ndevices, but want to target Android 3.0 or later versions. When you do this, your application\nautomatically uses the action bar on Android 3.0 or later and uses the traditional menu system on\nolder devices: \n\n```xml\n\u003cuses-sdk android:minSdkVersion=\"7\" android:targetSdkVersion=\"15\" /\u003e\n\n\u003capplication\u003e\n...\n```\n\nProvide the Search Dialog for Older Devices\n-------------------------------------------\n\nTo invoke the search dialog on older devices, call [onSearchRequested()](/reference/android/app/Activity#onSearchRequested()) whenever a user selects the search\nmenu item from the options menu. Because Android 3.0 and higher devices show the\n[SearchView](/reference/android/widget/SearchView) in the action bar (as demonstrated in the first lesson), only versions\nolder than 3.0 call [onOptionsItemSelected()](/reference/android/app/Activity#onOptionsItemSelected(android.view.MenuItem)) when the\nuser selects the search menu item. \n\n### Kotlin\n\n```kotlin\noverride fun onOptionsItemSelected(item: MenuItem): Boolean {\n return when (item.itemId) {\n R.id.search -\u003e {\n onSearchRequested()\n true\n }\n else -\u003e false\n }\n}\n```\n\n### Java\n\n```java\n@Override\npublic boolean onOptionsItemSelected(MenuItem item) {\n switch (item.getItemId()) {\n case R.id.search:\n onSearchRequested();\n return true;\n default:\n return false;\n }\n}\n```\n\nCheck the Android Build Version at Runtime\n------------------------------------------\n\nAt runtime, check the device version to make sure an unsupported use of [SearchView](/reference/android/widget/SearchView) does not occur on older devices. In our example code, this happens in\nthe [onCreateOptionsMenu()](/reference/android/app/Activity#onCreateOptionsMenu(android.view.Menu)) method: \n\n### Kotlin\n\n```kotlin\noverride fun onCreateOptionsMenu(menu: Menu): Boolean {\n\n menuInflater.inflate(R.menu.options_menu, menu)\n\n if (Build.VERSION.SDK_INT \u003e= Build.VERSION_CODES.HONEYCOMB) {\n val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager\n (menu.findItem(R.id.search).actionView as SearchView).apply {\n setSearchableInfo(searchManager.getSearchableInfo(componentName))\n setIconifiedByDefault(false)\n }\n }\n return true\n}\n```\n\n### Java\n\n```java\n@Override\npublic boolean onCreateOptionsMenu(Menu menu) {\n\n MenuInflater inflater = getMenuInflater();\n inflater.inflate(R.menu.options_menu, menu);\n\n if (Build.VERSION.SDK_INT \u003e= Build.VERSION_CODES.HONEYCOMB) {\n SearchManager searchManager =\n (SearchManager) getSystemService(Context.SEARCH_SERVICE);\n SearchView searchView =\n (SearchView) menu.findItem(R.id.search).getActionView();\n searchView.setSearchableInfo(\n searchManager.getSearchableInfo(getComponentName()));\n searchView.setIconifiedByDefault(false);\n }\n return true;\n}\n```"]]