7

我需要显示 SearchView 始终展开并在 ActionBar 中再显示一个按钮,以便用户快速访问 Search 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>

在 Search 活动类中,我将 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);我会看到这张照片:
在此处输入图像描述

您会注意到没有第二个菜单项。在这里,如果我设置 android:showAsAction="always|collapseActionView",它会默认折叠,但我现在可以看到第二项:
在此处输入图像描述
在上图中,我已经按下了搜索图标

有两个问题我想不通:

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

3 回答 3

3

我设法通过使用来解决这个问题

mySearchView.setIconfied(false); 

而不是 setIconifiedByDefault()

PS我正在使用android.support.v7.widget.SearchView

于 2013-11-20T16:37:49.080 回答
3

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

在您管理主题的 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 并将其包含在其中。这将强制它在您展开操作视图时隐藏图标。

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

android:showAsAction="collapseActionView|ifRoom"

当操作栏中有足够的空间时,这应该会导致搜索栏扩展,而不是完全迫使它们离开栏。

高温高压

于 2013-07-15T16:40:51.507 回答
0

我解决两个元素显示的方法是为 SearchView 设置一个特定的宽度。

FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(350, FrameLayout.LayoutParams.WRAP_CONTENT);
searchView.setLayoutParams(lp);

我正在使用的代码是:

res/menu/main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/search"
        android:actionViewClass="com.actionbarsherlock.widget.SearchView"
        android:showAsAction="always"
        android:title="@string/action_search"/>
    <item
        android:id="@+id/settings"
        android:showAsAction="ifRoom"
        android:onClick="startSettingsActivity"
        android:title="@string/action_settings"/>
</menu>

在我的活动中

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getSupportMenuInflater().inflate(R.menu.main, menu);
    MenuItem searchViewItem = menu.findItem(R.id.search);
    SearchView searchView = (SearchView) searchViewItem.getActionView();
    FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(350, FrameLayout.LayoutParams.WRAP_CONTENT);
    searchView.setLayoutParams(lp);

    searchView.setIconifiedByDefault(false);
    searchView.setSubmitButtonEnabled(false);

    return true;
}

public void startQuickSearchActivity(MenuItem menuItem){
    startActivity(new Intent(this, QuickSearchActivity_.class));
}
于 2013-05-08T04:57:31.743 回答