Как заставить SearchView вести себя стандартным образом?

При добавлении SearchView в меню (см. пример ниже), значок не изменяется и ведет себя нестандартным способом. Например, длительное нажатие на кнопку меню поиска должно было выскочить текст поиска, но это не так.

Как изменить его поведение более стандартным? (значок и длинный клик на данный момент. Я уверен, что есть другие проблемы)

Пример кода для добавления представления:

MenuItem item = menu.add("Search");
SearchView sv = new SearchView(getActivity());
item.setActionView(sv);
item.setIcon(drawable.menu_search);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);

Спасибо.

Ответ 1

Обновление: Возможно из кода. Вы должны добавить MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW и изменить контекст SearchView на getActionBar().getThemedContext().

MenuItem item = menu.add("Search");
SearchView sv = new SearchView(getActionBar().getThemedContext());
item.setActionView(sv);
item.setIcon(R.drawable.ic_search);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW
        | MenuItem.SHOW_AS_ACTION_IF_ROOM);

Вы пытаетесь создать элемент действия SearchView из кода, который не является предлагаемым способом его выполнения. Определите ресурс меню, содержащий элемент поиска, например:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/search"
        android:actionViewClass="android.widget.SearchView"
        android:icon="@drawable/ic_search"
        android:showAsAction="collapseActionView|ifRoom"
        android:title="@string/search_title"/>

</menu>

Наполните его в onCreateOptionsMenu:

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

Это решит проблемы. Для получения дополнительной информации прочтите Добавить поиск в панель действий из документации по Android.