Ответ 1
Установите логотип в качестве значка. Через атрибут темы
<item name="android:icon">@drawable/ab_logo</item>
или в коде
getSupportActionBar().setIcon(R.drawable.ab_logo);
В документах 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 для значка приложения. Первый снимок экрана - это представление активности по умолчанию. Второй - это вид, когда я нажимаю кнопку поиска. Он показывает изображение андроида, пока я ожидаю, что это будет изображение звезды.
Установите логотип в качестве значка. Через атрибут темы
<item name="android:icon">@drawable/ab_logo</item>
или в коде
getSupportActionBar().setIcon(R.drawable.ab_logo);
Вы используете совершенно другой 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);
Это настройка, которая у меня есть в моем текущем проекте, и никогда не испытывала таких проблем.
У меня была такая же проблема, и я решил ее с помощью следующего кода:
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;
}
Сообщите мне, как это работает для вас.
Я получил решение с помощью этой простой логики:
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);
}
Просто удалите collapseActionView из вашего меню Xml.
Чтобы заменить значок логотипом, укажите свой логотип приложения в файле манифеста с атрибутом android:logo
, затем вызовите setDisplayUseLogoEnabled(true)
в своей деятельности.
отсылайте этот document1 document2
И, пожалуйста, см. этот ответ для более подробной информации
Единственное, что вам нужно установить, - это (в 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);
У меня была та же проблема, (для АБС) у меня было:
ActionBar actionBar = ((SherlockFragmentActivity) activity).getSupportActionBar();
actionBar.setLogo(R.drawable.logo);
И я просто добавил:
actionBar.setIcon(R.drawable.logo);
И проблема исчезла.
Я нашел, что лучший способ решить эту проблему состоял в том, чтобы добавить 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() в коде так же, как в приведенном выше примере.
Энди.