我制作了一个带有标题和功能弹出菜单的自定义工具栏,但我似乎无法在工具栏中显示搜索菜单。搜索菜单图标甚至没有显示在此活动的工具栏中,我不明白为什么。
主要活动:
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,但搜索菜单仍然不起作用。
这是因为你设置了这个属性来匹配parent,它覆盖了你的工具栏,
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
将layout_width更改为
wrap content,
,就可以了。