android - 搜索未出现在工具栏中(即使使用硬编码的工具栏高度值)
问题描述
我想在我的应用程序中实现搜索功能,我想在我的工具栏上添加搜索栏。我的工具栏出现了,但搜索不存在(空白工具栏)。我怎样才能解决这个问题?我在网站上搜索过,有些是通过对工具栏高度进行硬编码来解决的,这对我不起作用。我的代码有什么问题?
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.search_menu,menu);
MenuItem searchItem = menu.findItem(R.id.m_search);
SearchView searchView = (SearchView) searchItem.getActionView();
return super.onCreateOptionsMenu(menu);
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar_search);
setSupportActionBar(toolbar);
}
我的toolbar_search
样子是这样的:
<android.support.v7.widget.Toolbar xmlns:tools="http://schemas.android.com/tools"
tools:ignore="MissingPrefix"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar_search"
android:minHeight="?attr/actionBarSize"
android:background="#005caa"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize">
</android.support.v7.widget.Toolbar>
我的search_menu.xml
样子是这样的:
<?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/m_search"
android:icon="@drawable/ic_search_24dp"
android:title="@string/search_title"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="ifRoom|collapseActionView" />
</menu>
在我的活动中,我只是toolbar
在我的布局中包含这样的:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".main.MActivity">
<include
android:id="@+id/toolbar"
layout="@layout/toolbar_search" />
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/toolbar"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</RelativeLayout>
解决方案
我不明白你为什么要包含一个工具栏而不是直接实现一个。代替
<include
android:id="@+id/toolbar"
layout="@layout/toolbar_search" />
利用
<androidx.appcompat.Toolbar xmlns:tools="http://schemas.android.com/tools"
tools:ignore="MissingPrefix"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar_search"
android:minHeight="?attr/actionBarSize"
android:background="#005caa"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"/>
直接地。然后,在 中返回 true onCreateOptionsMenu
,在此之前执行以下操作:
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
//do whatever you want on text submit
return true;
}
@Override
public boolean onQueryTextChange(String s) {
//do whatever you want on text change
return true;
}
});
推荐阅读
- python - 如何使用正则表达式查找每个首字母已知的短语?
- python - 对字典排序并返回一定数量阈值以上值的key的理解
- java - 静态数据成员是否在 Java 中继承?
- javascript - 将类组件转换为功能组件 react native
- wordpress - WordPress 按类别搜索表单不起作用?
- javascript - 即使返回了值,异步函数也返回 undefined
- python - 变量参数中带有冒号的 Python 函数
- rest - REST API 处理错误的最佳实践
- javascript - 无法使用 JS 创建侧边栏
- python - 如何使用带有数据框的python创建一个函数以在动态列名上删除NaN值?