搜索视图使用应用图标而不是徽标

aka*_*aya 29 android actionbarsherlock android-actionbar

Android文档说明app logo在定义时随处可用.但是当搜索视图扩展时,使用应用程序图标而不是应用程序徽标,当搜索视图处于展开状态时,我找不到显示应用程序徽标的方法.

以下是相关部分.

清单文件

<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" >
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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" />
Run Code Online (Sandbox Code Playgroud)

活动代码

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);
Run Code Online (Sandbox Code Playgroud)

注意:我使用ABS SearchView但是当我切换到默认的SearchView时会发生同样的事情.

编辑:为了清晰起见,我添加了一些截图.

在这里,我使用app图标的星形图像和app图标的android图像.第一个屏幕截图是活动的默认视图.第二个是我点击搜索按钮时的视图.它显示了android图像,而我希望它是星形图像.

在此输入图像描述

在此输入图像描述

Mat*_*ers 20

将徽标drawable设置为您的图标.通过主题属性

<item name="android:icon">@drawable/ab_logo</item>
Run Code Online (Sandbox Code Playgroud)

或者在代码中

getSupportActionBar().setIcon(R.drawable.ab_logo); 
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用.应该是接受的答案. (6认同)
  • 确保将这个`item`放在`ActionBar`样式中,否则它会在`preferences`上放置一个标识.为我工作完美. (2认同)

Yar*_*lyk 10

您正在使用在menu.xml中声明的完全不同的SearchView.

使用此代码,您可以创建新的SearchView,这不是您想要的.

SearchView searchView = new SearchView(getSupportActionBar().getThemedContext());
Run Code Online (Sandbox Code Playgroud)

所以尝试创建这样的菜单.

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);
Run Code Online (Sandbox Code Playgroud)

对于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);
Run Code Online (Sandbox Code Playgroud)

这是我当前项目中的设置,从未遇到过像这样的问题.


小智 7

我有同样的问题,我使用以下代码解决了它:

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;
}
Run Code Online (Sandbox Code Playgroud)

让我知道这对你有什么用.


小智 5

我用这个简单的逻辑实现了解决方案:

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);
    }
Run Code Online (Sandbox Code Playgroud)