【问题标题】:How to create two SearchViews in the Toolbar in Android如何在 Android 的 Toolbar 中创建两个 SearchView
【发布时间】:2016-04-13 19:57:00
【问题描述】:

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

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

我想出了两种可能可行的方法,但我都遇到了问题,我不知道如何解决。

第一个解决方案(当前)

这里我有一个线性布局,里面是一个 android.support.v7.widget.Toolbar、一个视图,然后是第二个 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>`

创建:

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。谢谢。

【问题讨论】:

    标签: android android-toolbar searchview android-search


    【解决方案1】:

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

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

    然后用 setOnMenuItemClickListener 处理里面的所有动作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      • 2015-01-15
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多