이전 버전과의 호환성 유지

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 (첫 번째 과정에서 설명), 버전만 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;
}