android - 显示 ActionBarSherlock SearchView 始终展开

标签 android actionbarsherlock searchview

我需要显示 SearchView 始终展开,并在 ActionBar 中显示一个按钮,以便用户可以快速访问搜索 Activity 中的搜索字符串。
我的 Activity 有这个菜单布局:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/action_search"
        android:title="@string/action_search"
        android:icon="@drawable/ic_action_search"
        android:showAsAction="always"
        android:actionViewClass="com.actionbarsherlock.widget.SearchView"/>
    <item android:id="@+id/action_configure"
        android:title="@string/action_configure"
        android:icon="@android:drawable/ic_menu_preferences"
        android:showAsAction="always" />
</menu>

在搜索 Activity 类中,我按如下方式配置 ActionBar:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getSupportMenuInflater().inflate(R.menu.search, menu);
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView)menu.findItem(R.id.action_search).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setIconifiedByDefault(false);
    searchView.setSubmitButtonEnabled(false);
return true;
}

问题是如果我执行 searchView.setIconifiedByDefault(false); 我会看到这张图片:
enter image description here

您会注意到没有第二个菜单项。在这里,如果我设置 android:showAsAction="always|collapseActionView",默认情况下它会折叠,但我现在可以看到第二个项目:
enter image description here
在上图中我已经按下了搜索图标

有两个问题想不通:

  1. 如何始终显示两个元素:展开的搜索 View 和用于配置操作的图标?
  2. 如何摆脱这个丑陋的第二个搜索图标?

最佳答案

这是我隐藏内部搜索图标的解决方案。

在您管理主题的 styles.xml 中,将以下内容添加到您的 application_theme 部分(通常在 base_theme 下方)

<!--Application Theme-->
<style name="application_theme" parent="application_base_theme">
    <item name="searchViewSearchIcon">@android:color/transparent</item>
    <item name="searchViewCloseIcon">@android:color/transparent</item>
</style>

这会强制操作栏搜索小部件中出现的所有搜索图标都透明且不可见。

虽然它们仍然会占用文本字段中的空间,但会在图标曾经所在的左侧创建一个不可见的边距。如果您想解决这个问题,您必须改为使用您自己的类扩展 com.actionbarsherlock.widget.SearchView 并添加以下内容:

ImageView searchHintIcon = (ImageView) findViewById(R.id.abs__search_mag_icon);
searchHintIcon.setVisibility(View.GONE);

我会将它添加到构造函数中,但也会覆盖 setIconified 和 setIconifiedByDefault 并将其也包含在那里。这将强制它在您展开操作 View 时隐藏图标。

要在操作栏中显示其他图标,请尝试设置:

android:showAsAction="collapseActionView|ifRoom"

这应该会导致搜索栏在操作栏中有足够空间时展开,而不是将它们完全从搜索栏中移开。

HTH

关于android - 显示 ActionBarSherlock SearchView 始终展开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13604506/

相关文章:

java - Android错误 Activity 管理器类型3(Eclipse,使用jni)

android - Action 条 Sherlock : Setting and hiding title bar

Android - 使整个搜索栏可点击

android - 使用 SearchView 在搜索操作栏激活时显示软键盘

java - getSupportActionBar 返回 null

android - SearchView 可以同时具有语音搜索按钮和键盘语音输入吗?

android - Eclipse ADT 正式被废弃了吗?

php - Android:将文件与其他 POST 字符串一起上传到页面

android - java.lang.RuntimeException : Canvas: trying to use a recycled bitmap, 无法追踪确切位置

android - 滚动时 SherlockFragments 中 ViewPager 的可见性问题(在 Gingerbread 中)