Подтвердить что ты не робот

Search View использует значок приложения вместо логотипа

В документах Android объясняется, что логотип приложения используется везде, когда он определен. Но когда расширение поиска расширяется, значок приложения используется вместо логотипа приложения, и я не могу найти способ показать логотип приложения, когда вид поиска находится в расширенном состоянии.

Вот соответствующие части.

Файл манифеста

<application
    android:name="MyApp"
    android:allowBackup="true"
    android:icon="@drawable/app_icon"
    android:label="@string/app_name"
    android:logo="@drawable/app_logo"
    android:theme="@style/Theme.MyTheme" >

searchable.xml(значок настройки ничего не меняет)

<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:icon="@drawable/app_logo"
    android:label="@string/app_name"
    android:hint="@string/search_hint" >
</searchable>

menu.xml

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

    <item
        android:id="@+id/menu_search"
        android:actionViewClass="com.actionbarsherlock.widget.SearchView"
        android:icon="@drawable/ic_search"
        android:showAsAction="always|collapseActionView" />

Код действия

SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
SearchView searchView = new SearchView(getSupportActionBar().getThemedContext());
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
menu.findItem(R.id.menu_search).setActionView(searchView);

ПРИМЕЧАНИЕ. Я использую ABS SearchView, но то же самое происходит, когда я переключаюсь по умолчанию SearchView.

EDIT: Я добавил несколько скриншотов для ясности.

Здесь я использовал изображение звезды для логотипа приложения и изображение Android для значка приложения. Первый снимок экрана - это представление активности по умолчанию. Второй - это вид, когда я нажимаю кнопку поиска. Он показывает изображение андроида, пока я ожидаю, что это будет изображение звезды.

enter image description here

enter image description here

4b9b3361

Ответ 1

Установите логотип в качестве значка. Через атрибут темы

<item name="android:icon">@drawable/ab_logo</item>

или в коде

getSupportActionBar().setIcon(R.drawable.ab_logo); 

Ответ 2

Вы используете совершенно другой SearchView, который вы указали в menu.xml.

С помощью этого кода вы создаете новый SearchView, который вам не нужен.

SearchView searchView = new SearchView(getSupportActionBar().getThemedContext());

Итак, попробуйте создать такое меню.

this.getSupportMenuInflater().inflate(R.menu.menu, menu);
final SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
final SearchableInfo info = searchManager.getSearchableInfo(getComponentName());
final MenuItem searchItem = menu.findItem(R.id.menu_search);
final SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setSearchableInfo(info);

И для ActionBar, а не для setDisplayUseLogoEnabled (true) и других, попробуйте сразу установить все параметры

final ActionBar bar = getSupportActionBar();
bar.setDisplayOptions(
        ActionBar.DISPLAY_SHOW_TITLE |
        ActionBar.DISPLAY_USE_LOGO |
        ActionBar.DISPLAY_SHOW_HOME |
        ActionBar.DISPLAY_HOME_AS_UP);

Это настройка, которая у меня есть в моем текущем проекте, и никогда не испытывала таких проблем.

Ответ 3

У меня была такая же проблема, и я решил ее с помощью следующего кода:

menu.findItem(R.id.menu_search).setOnActionExpandListener(this); 
// Your Activity/Fragment must implement the MenuItem.OnActionExpandListener interface

@Override
public boolean onMenuItemActionExpand(MenuItem item) {
    getSherlockActivity().getSupportActionBar().setIcon(R.drawable.uvweb_logo);
    return true;
}

Сообщите мне, как это работает для вас.

Ответ 4

Я получил решение с помощью этой простой логики:

public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()){
        case R.id.menu_search:
            getActionBar().setIcon(R.drawable.your_logo);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

Ответ 5

Просто удалите collapseActionView из вашего меню Xml.

Ответ 6

Чтобы заменить значок логотипом, укажите свой логотип приложения в файле манифеста с атрибутом android:logo, затем вызовите setDisplayUseLogoEnabled(true) в своей деятельности.

отсылайте этот document1 document2

И, пожалуйста, см. этот ответ для более подробной информации

Ответ 7

Единственное, что вам нужно установить, - это (в onCreate of activity):

getSupportActionBar().setIcon(R.drawable.logo);

... нет также setLogo.

Независимо от того, есть ли значок в манифесте, установленном на что-то другое, это покажет активности, чтобы использовать другое изображение во время выполнения.

Я тестировал это со следующим пунктом меню, и он работает:

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

    <item android:id="@+id/menu_search"
          android:icon="@drawable/ic_action_search"
          android:title="@string/search_hint"
          android:orderInCategory="1"
          android:actionViewClass="android.widget.SearchView"
          android:showAsAction="always|collapseActionView"/>

  </menu>

Надувается как обычно в onCreateOptionsMenu:

getSupportMenuInflater().inflate(R.menu.search_menu, menu);

Ответ 8

У меня была та же проблема, (для АБС) у меня было:

    ActionBar actionBar = ((SherlockFragmentActivity) activity).getSupportActionBar();
    actionBar.setLogo(R.drawable.logo);

И я просто добавил:

actionBar.setIcon(R.drawable.logo);

И проблема исчезла.

Ответ 9

Я нашел, что лучший способ решить эту проблему состоял в том, чтобы добавить SearchView программно в меню следующим образом: -

    SearchView searchView = new SearchView(getActionBar().getThemedContext());
    menu.add("Search")
            .setIcon(R.drawable.ic_action_search)
            .setActionView(searchView)
            .setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
                @Override
                public boolean onMenuItemActionExpand(MenuItem item) {
                    getActionBar().setIcon(R.drawable.ic_action_willyweather);

                    return true;
                }

                @Override
                public boolean onMenuItemActionCollapse(MenuItem item) {
                    return true;
                }
            })
            .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItem.SHOW_AS_ACTION_IF_ROOM);

И затем используйте onActionExpandListener, чтобы изменить значок/логотип на правильное значение, когда расширяется SearchView.

Это решение может также работать, если вы определяете SearchView в menu.xml, но вам все равно нужно настроить onActionExpandListener() в коде так же, как в приведенном выше примере.

Энди.