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" >
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时会发生同样的事情。
编辑:为了清晰起见,我添加了一些屏幕截图。
这里我使用了app徽标的星形图像和app图标的android图像。 第一个屏幕截图是活动的默认视图。 第二个是我点击搜索按钮时的视图。 它显示了android图像,而我希望它是星形图像。
答案 0 :(得分:20)
将徽标drawable设置为您的图标。通过主题属性
<item name="android:icon">@drawable/ab_logo</item>
或代码
getSupportActionBar().setIcon(R.drawable.ab_logo);
答案 1 :(得分: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);
这是我当前项目中的设置,从未遇到过像这样的问题。
答案 2 :(得分: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;
}
让我知道这对你有用。
答案 3 :(得分: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);
}
答案 4 :(得分:3)
只需从菜单Xml中删除collapseActionView即可。
答案 5 :(得分:2)
要使用徽标替换图标,请在清单文件中使用android:logo
属性指定您的应用徽标,然后在您的活动中调用setDisplayUseLogoEnabled(true)
。
请参阅this回答了解更多详情
答案 6 :(得分:2)
你唯一需要设置的是(在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);
答案 7 :(得分:0)
我有同样的问题,(对于ABS)我有:
ActionBar actionBar = ((SherlockFragmentActivity) activity).getSupportActionBar();
actionBar.setLogo(R.drawable.logo);
我刚补充说:
actionBar.setIcon(R.drawable.logo);
问题已经消失。
答案 8 :(得分: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);
然后使用onActionExpandListener将图标/徽标更改为正确的值,然后展开SearchView。
如果您在menu.xml中定义SearchView,此解决方案也可能有效,但您仍然需要在代码中设置onActionExpandListener()以执行与上述示例相同的操作。
安迪。