如何在Android工具栏中创建两个SearchView

时间:2016-01-09 01:45:15

标签: android android-toolbar searchview android-search

我希望在我的一个活动中在工具栏中有两个搜索视图:第一个用于查找感兴趣的位置,第二个用于按位置过滤。

searchViews将在彼此之上始终展开。最上面的一个会说“搜索”作为提示。最底层的人会说“附近”作为提示。在左边是主页按钮。

我提出了两种可能有效的方法,但我遇到了两种问题,我不知道如何解决它们。

第一个解决方案(当前)

这里我有一个线性布局,里面是android.support.v7.widget.Toolbar,一个视图,后面是第二个工具栏。

这基本上是我想要的样子,但问题是更改onCreateOptionsMenu中的提示文本会改变两个提示。我想顶部说“搜索”,底部说“附近”。似乎因为有两个工具栏,onCreateOptionsMenu会影响它们。

代码:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/search_container"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:orientation="vertical">
    <android.support.v7.widget.Toolbar
        android:id="@+id/search_toolbar"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:minHeight="?attr/actionBarSize"
        android:theme="@style/ThemeOverlay.AppCompat.ActionBar">
    </android.support.v7.widget.Toolbar>
    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginLeft="72dp"
        android:background="#90909090"/>
    <android.support.v7.widget.Toolbar
        android:id="@+id/search_toolbar2"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:minHeight="?attr/actionBarSize"
        app:contentInsetStart="56dp"
        android:theme="@style/ThemeOverlay.AppCompat.ActionBar">
    </android.support.v7.widget.Toolbar>
    <include
        layout="@layout/toolbar_action_bar_shadow"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"/>
</LinearLayout>`

的onCreate:

Toolbar toolbar2 = (Toolbar) findViewById(R.id.search_toolbar2);
setSupportActionBar(toolbar2);

Toolbar toolbar = (Toolbar) findViewById(R.id.search_toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(false);
getSupportActionBar().setDisplayShowTitleEnabled(false);

OnCreateOptionsMenu:

SearchView searchViewTop = (SearchView)   MenuItemCompat.getActionView(menu.findItem(R.id
            .search_top));
    SearchManager searchManager1 = (SearchManager) getActivity().getSystemService(Context
            .SEARCH_SERVICE);
    searchViewTop.setSearchableInfo(searchManager1.getSearchableInfo(getActivity()
            .getComponentName()));
    searchViewTop.setIconified(false);
    searchViewTop.onActionViewExpanded();
    searchViewTop.setQueryHint("Nearby");

第二个解决方案(旧)

第二种方法涉及在xml文件中放置searchView而不是第二个工具栏。虽然第二个搜索视图不在工具栏内,但可以看起来像它。我遇到的问题是不在工具栏内的searchView看起来与工具栏里面的searchView有所不同,以及我希望它如何。当不在工具栏内时,提示文本将进一步向右对齐,而不是直接在顶部提示文本下方。但是,在搜索视图中输入的任何新文本都将正确对齐。我尝试自定义searchview的样式以使其正确对齐,但无法找到正确的方法。

我想知道是否有办法纠正我的任何方法以使其工作,或者是否有新的方法来设置这两个searchViews。感谢。

1 个答案:

答案 0 :(得分:0)

我意识到当你为多个工具栏调用setSupportActionBar()时,onCreateOptionsMenu中的更改会影响添加的所有工具栏。为了解决这个问题,我只在我的顶部工具栏上调用了setSupportActionBar。对于底部工具栏,我调用了onCreate

toolbar2.inflateMenu(R.menu.search2);
SearchView searchViewBottom = (SearchView)findViewById(R.id.search_bottom);
searchViewBottom.onActionViewExpanded();

然后使用setOnMenuItemClickListener处理所有内部操作。