Элемент действия поиска, отсутствующий на панели действий

#java #android #search #android-actionbar

#java #Android #Поиск #android-панель действий

Вопрос:

Я новичок в разработке Android. Я следую началу руководства по разработке из developer.android.com . К сожалению, я застрял, пытаясь добавить элемент действия поиска на панель действий. Это мой XML и onCreateOptionsMenu, который соответствует:

 <menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.example.test.MainActivity" >

    <item android:id="@ id/action_search"
          android:icon="@drawable/ic_action_search"
          android:title="@string/action_search"
          app:showAsAction="always"/>

    <item
        android:id="@ id/action_settings"
        android:orderInCategory="100"
        android:title="@string/action_settings"
        app:showAsAction="never"/>

</menu>
 

.

     @Override
    public boolean onCreateOptionsMenu(Menu menu) {

    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return super.onCreateOptionsMenu(menu);
}
 

Мои доступные для рисования каталоги содержат файл ic_action_search.png для всех плотностей экрана. Кроме того, мой минимальный SDK равен 8, а целевой — 19. Я также импортировал v7.app.ActionBarActivity.

Отображается меню настроек и переполнения, но поиск по-прежнему отсутствует. Что я делаю не так?

Ответ №1:

Это может быть связано с тем, что вы используете библиотеку совместимости, и в этом случае вам нужно добавить дополнительные атрибуты в XML-файл меню. Это мой элемент для опции поиска…

 <item android:id="@ id/options_menu_search"
    android:title="@string/search"
    android:icon="@android:drawable/ic_menu_search"
    com.mycompany.myapp:showAsAction="ifRoom|collapseActionView"
    com.mycompany.myapp:actionViewClass="android.support.v7.widget.SearchView" >
</item>
 

Обратите внимание на две строки, которые начинаются с com.mycompany.myapp — они необходимы при использовании параметров меню совместимости. Измените этот префикс, чтобы он соответствовал имени пакета вашего приложения.

Комментарии:

1. Это было оно. Большое вам спасибо.

2. @AlanW: Вы обнаружите, что вам действительно нужны эти дополнительные строки с префиксом пакета для устройств, работающих под управлением API 11. В данный момент я не могу найти ссылку на документацию, но когда найду, я опубликую ее. Есть несколько мест, где вам приходится выполнять аналогичные действия при использовании библиотек совместимости.