处理对 SearchView 图标的点击
Handling the click on a SearchView's icon
首先,我将向您解释我想做什么。然后,我将向您展示我已经完成的工作。最后,我会请你帮助我实现什么。
我的目标
我的目标是 Toolbar
像 Playstore:
当您点击汉堡菜单时,它会显示菜单。
当您单击输入时,它会显示更改图标并显示键盘:
我现在有什么
我遵循了文档 (https://developer.android.com/training/appbar/ + https://developer.android.com/guide/topics/search/search-dialog + https://developer.android.com/training/search/setup)。因此,我有:
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>
- 我的片段布局中的
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"/>
- 样式
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>
- 在片段 class 中,我使用了工具栏:
@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;
}
- 在片段 class 中,我使用了
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
)。
如何更改 SearchView
的图标?现在它是一个放大镜。一定是汉堡菜单。我试图通过向 SearchView
指示 android:icon=
来修改 res/menu/action_bar_menu.xml
,但它没有用。我也尝试过在 ToolbarActionButton
样式中使用 <item name="searchIcon">@drawable/ic_baseline_menu_24px</item>
但它没有用。 这里的目的是用汉堡菜单图标代替玻璃杯。
我如何处理对 SearchView
的汉堡菜单图标的点击(设置后)?事实上,我会调用 DrawerLayout::openDrawer
函数来打开我的菜单。
如何处理对 SearchView
内容的点击?事实上,我将用左箭头替换汉堡菜单(如果单击,键盘将消失并显示汉堡菜单)。
我是不是用错东西了?
我只是遵循了 Google 的文档。但是意识到我可能走错路对我来说似乎很复杂?我应该停止使用菜单项结构吗?
您可以尝试 SearchEditTextLayout 在这个 Google 项目下可用 -
https://android.googlesource.com/platform/packages/apps/Dialer/
这些库也可以帮助您实现您想要的结果。
首先,我将向您解释我想做什么。然后,我将向您展示我已经完成的工作。最后,我会请你帮助我实现什么。
我的目标
我的目标是 Toolbar
像 Playstore:
当您点击汉堡菜单时,它会显示菜单。 当您单击输入时,它会显示更改图标并显示键盘:
我现在有什么
我遵循了文档 (https://developer.android.com/training/appbar/ + https://developer.android.com/guide/topics/search/search-dialog + https://developer.android.com/training/search/setup)。因此,我有:
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>
- 我的片段布局中的
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"/>
- 样式
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>
- 在片段 class 中,我使用了工具栏:
@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;
}
- 在片段 class 中,我使用了
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
)。
如何更改
SearchView
的图标?现在它是一个放大镜。一定是汉堡菜单。我试图通过向SearchView
指示android:icon=
来修改res/menu/action_bar_menu.xml
,但它没有用。我也尝试过在ToolbarActionButton
样式中使用<item name="searchIcon">@drawable/ic_baseline_menu_24px</item>
但它没有用。 这里的目的是用汉堡菜单图标代替玻璃杯。我如何处理对
SearchView
的汉堡菜单图标的点击(设置后)?事实上,我会调用DrawerLayout::openDrawer
函数来打开我的菜单。如何处理对
SearchView
内容的点击?事实上,我将用左箭头替换汉堡菜单(如果单击,键盘将消失并显示汉堡菜单)。
我是不是用错东西了?
我只是遵循了 Google 的文档。但是意识到我可能走错路对我来说似乎很复杂?我应该停止使用菜单项结构吗?
您可以尝试 SearchEditTextLayout 在这个 Google 项目下可用 - https://android.googlesource.com/platform/packages/apps/Dialer/
这些库也可以帮助您实现您想要的结果。