Android Studio 工具栏中未显示搜索菜单

问题描述 投票:0回答:1

我制作了一个带有标题和功能弹出菜单的自定义工具栏,但我似乎无法在工具栏中显示搜索菜单。搜索菜单图标甚至没有显示在此活动的工具栏中,我不明白为什么。

主要活动:

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SearchView;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.appcompat.widget.Toolbar;

import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.PopupMenu;
import android.widget.TextView;

import java.util.ArrayList;

public class Skills_main extends AppCompatActivity implements SkillsRecyclerViewInterface {

    ArrayList<SkillsListModel> skillsListModels = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_skills_main);

        RecyclerView recyclerView = findViewById(R.id.skillsRecyclerView);


        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        setUpSkillsListModels();
        SkillsRecyclerViewAdapter adapter = new SkillsRecyclerViewAdapter(this, skillsListModels, this);
        recyclerView.setAdapter(adapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        ImageView menuIcon = findViewById(R.id.menu_icon);
        TextView title = findViewById(R.id.toolbar_title);
        String skillsTable = "Skills";
        title.setText(skillsTable);



        menuIcon.setOnClickListener(this::showMenu);


    }

    private void setUpSkillsListModels() {
        String[] skillsHeaders = getResources().getStringArray(R.array.skillHeaders);
        String[] skillDescriptions = getResources().getStringArray(R.array.skillDescriptions);

        for (int i = 0; i < skillsHeaders.length; i++) {
            skillsListModels.add(new SkillsListModel(skillsHeaders[i],skillDescriptions[i]));
        }
    }

    private void showMenu(View v){
        PopupMenu popupMenu = new PopupMenu(Skills_main.this,v);
        popupMenu.getMenuInflater().inflate(R.menu.popup_menu, popupMenu.getMenu());
        popupMenu.setOnMenuItemClickListener(item -> {
            if(item.getItemId()== R.id.appInfo) {
                Intent intent = new Intent(Skills_main.this, App_Info_Page.class);
                startActivity(intent);
            }
            if(item.getItemId()==R.id.appHome) {
                Intent intent = new Intent(Skills_main.this, MainActivity.class);
                startActivity(intent);
            }
            return true;
        });
        popupMenu.show();
    }

    @Override
    public void onItemClick(int position) {
        Intent intent = new Intent(Skills_main.this, SkillsDescriptions.class);

        intent.putExtra("TITLE", skillsListModels.get(position).getSkillsTitle());
        intent.putExtra("DESCRIPTION", skillsListModels.get(position).getSkillsDescription());

        startActivity(intent);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.search_menu, menu);

        MenuItem item = menu.findItem(R.id.action_search);
        SearchView searchView = (SearchView) item.getActionView();

        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String query) {
                return false;
            }

            @Override
            public boolean onQueryTextChange(String newText) {
                return false;
            }
        });

        return super.onCreateOptionsMenu(menu);
    }
}

工具栏 XML:

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/list_background"
    android:elevation="8dp"
    android:id="@+id/toolbar"
    android:fitsSystemWindows="true">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ImageView
            android:id="@+id/menu_icon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingVertical="15dp"
            android:contentDescription="@string/app_info"
            android:src="@drawable/baseline_menu_24" />

        <TextView
            android:id="@+id/toolbar_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_centerVertical="true"
            android:layout_marginStart="40dp"
            android:fontFamily="@font/graduate"
            android:text="@string/app_name"
            android:textColor="#E3CDB3"
            android:textSize="22sp" />

    </RelativeLayout>

</androidx.appcompat.widget.Toolbar>

搜索菜单 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/action_search"
        android:title="Search"
        android:icon="@drawable/baseline_search_24"
        app:showAsAction="ifRoom|collapseActionView"
        app:actionViewClass="androidx.appcompat.widget.SearchView"/>

</menu>

我添加了 setSupportActionBar(toolbar) 行来尝试让工具栏表现得像操作栏一样。我还尝试使用与制作弹出菜单类似的 ImageView,但搜索菜单仍然不起作用。

java android android-actionbar android-toolbar android-search
1个回答
0
投票

这是因为你设置了这个属性来匹配parent,它覆盖了你的工具栏,

 <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

将layout_width更改为

wrap content,
,就可以了。

© www.soinside.com 2019 - 2024. All rights reserved.