29

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>

菜单.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 时也会发生同样的事情。

编辑:为了清楚起见,我添加了一些屏幕截图。

在这里,我使用星形图像作为应用程序徽标,使用 android 图像作为应用程序图标。第一个屏幕截图是活动的默认视图。第二个是单击搜索按钮时的视图。它显示了 android 图像,而我希望它是明星图像。

在此处输入图像描述

在此处输入图像描述

4

9 回答 9

20

将可绘制的徽标设置为您的图标。通过主题属性

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

或在代码中

getSupportActionBar().setIcon(R.drawable.ab_logo); 
于 2013-05-15T21:27:57.163 回答
10

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

使用此代码,您可以创建新的 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);

这是我在当前项目中的设置,从未遇到过此类问题。

于 2013-05-20T12:59:20.793 回答
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;
}

让我知道这对你有用。

于 2013-06-05T12:37:34.070 回答
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);
    }
于 2013-11-11T08:38:35.220 回答
3

只需从您的菜单 Xml 中删除 collapseActionView。

于 2013-05-24T19:34:20.830 回答
2

您唯一需要设置的是这个(在活动的 onCreate 中):

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);
于 2013-07-07T05:07:40.993 回答
2

要将图标替换为徽标,请在清单文件中使用android:logo属性指定您的应用程序徽标,然后调用setDisplayUseLogoEnabled(true)您的活动。

请参阅此文档 1 文档2

请参阅答案以获取更多详细信息

于 2013-05-14T13:12:40.047 回答
0

我发现解决此问题的最佳方法是以编程方式将 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);

然后在展开 SearchView 时使用 onActionExpandListener 将图标/徽标更改为正确的值。

如果您在 menu.xml 中定义 SearchView,此解决方案也可能有效,但您仍需要在代码中设置 onActionExpandListener() 以执行与上述示例相同的操作。

安迪。

于 2014-01-08T11:30:28.943 回答
0

我有同样的问题,(对于 ABS)我有:

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

我刚刚补充说:

actionBar.setIcon(R.drawable.logo);

问题消失了。

于 2013-09-26T10:20:32.730 回答