首页 > 解决方案 > 搜索未出现在工具栏中(即使使用硬编码的工具栏高度值)

问题描述

我想在我的应用程序中实现搜索功能,我想在我的工具栏上添加搜索栏。我的工具栏出现了,但搜索不存在(空白工具栏)。我怎样才能解决这个问题?我在网站上搜索过,有些是通过对工具栏高度进行硬编码来解决的,这对我不起作用。我的代码有什么问题?

    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>

标签: androidxmlandroid-toolbar

解决方案


我不明白你为什么要包含一个工具栏而不是直接实现一个。代替

<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;
    }
}); 

推荐阅读