处理对SearchView图标的点击

时间:2018-09-16 16:22:08

标签: android android-toolbar searchview

首先,我将向您解释我想做什么。然后,我将向您展示我已经完成的工作。最后,我将要求您提供有关我将要实施的内容的帮助。

我的目标

我的目标是让Toolbar像Playstore:enter image description here

当您单击汉堡菜单时,它将显示菜单。 当您单击输入时,它会显示更改图标并显示键盘:

enter image description here

我现在有什么

enter image description here

我遵循了文档(https://developer.android.com/training/appbar/ + https://developer.android.com/guide/topics/search/search-dialog + https://developer.android.com/training/search/setup)。因此,我有:

  1. res/menu/action_bar_menu.xml包含我的SearchView小部件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item android:id="@+id/searchView"
        android:title="@string/search_title"
        app:actionViewClass="android.support.v7.widget.SearchView"
        app:showAsAction="always" />

</menu>
  1. 片段的布局中有一个Toolbar
    <android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="@color/colorRoyalRed"
    android:theme="@style/ToolbarStyle"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
  1. ToolbarStyle样式(请参见上文):
<style name="ToolbarStyle">
    <item name="android:background">@color/colorRoyalRed</item>
    <item name="android:textColorPrimary">@color/colorRichYellow</item>
    <item name="actionButtonStyle">@style/ToolbarActionButton</item>
</style>
<style name="ToolbarActionButton">
    <item name="android:padding">0dp</item>
    <item name="android:paddingStart">0dp</item>
    <item name="android:paddingEnd">0dp</item>
</style>
  1. 在片段类中,我使用了工具栏:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_home, container, false);
    Toolbar toolbar = view.findViewById(R.id.toolbar);
    toolbar.setTitle("");
    AppCompatActivity app_compat_activity = (AppCompatActivity) getActivity();
    Objects.requireNonNull(app_compat_activity).setSupportActionBar(toolbar);
    app_compat_activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

    return view;
}
  1. 在片段类中,我使用了SearchView
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater menu_inflater) {
        menu_inflater.inflate(R.menu.action_bar_menu, menu);
        super.onCreateOptionsMenu(menu,menu_inflater);

        AppCompatActivity app_compat_activity = (AppCompatActivity) getActivity();


SearchView search_view = (SearchView) menu.findItem(R.id.searchView).getActionView();
        search_view.setIconifiedByDefault(false);
        SearchManager search_manager = (SearchManager) Objects.requireNonNull(app_compat_activity).getSystemService(Context.SEARCH_SERVICE);
        search_view.setSearchableInfo(Objects.requireNonNull(search_manager).getSearchableInfo(app_compat_activity.getComponentName()));
    }

还有其他实现(有关清单的修改等),但并不重要(请注意在工具栏中实现一个简单的搜索栏所需的所有更改...超过5个步骤...)。

接下来我要做什么(请帮忙!)

除了菜单项结构之外,我不想使用其他任何内容(因此,我不想在片段的布局中实际添加SearchView)。

  1. 如何更改SearchView的图标?现在,这是一个放大镜。它必须是汉堡菜单。我试图通过在res/menu/action_bar_menu.xml上指定android:icon=来修改SearchView,但是没有用。我还尝试使用<item name="searchIcon">@drawable/ic_baseline_menu_24px</item>风格的ToolbarActionButton,但是没有用。 这里的目的是用汉堡菜单图标代替杯子。

  2. 我如何处理SearchView的汉堡菜单图标的点击(一旦将其设置)?确实,我将调用DrawerLayout::openDrawer函数来打开菜单。

  3. 我如何处理对SearchView内容的点击?确实,我将用左箭头替换汉堡菜单(如果单击,键盘将消失,并且将显示汉堡菜单)。

我使用的是错误的东西吗?

我只是遵循Google的文档。但是对我来说,意识到自己可能走错了道路似乎太复杂了?我应该停止使用菜单项结构吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试在此Google项目下使用SearchEditTextLayout- https://android.googlesource.com/platform/packages/apps/Dialer/

这些库还可以帮助您获得所需的结果。

SearchViewFloatingSearchView