// Apache许可证协议 package net.micode.notes.ui; import android.content.Context; import android.view.Menu; import android.view.MenuItem; import android.widget.Button; import android.widget.PopupMenu; import android.widget.PopupMenu.OnMenuItemClickListener; import net.micode.notes.R; public class DropdownMenu { private Button mButton; private PopupMenu mPopupMenu; private Menu mMenu; // 一个 Button 控件,用于显示菜单的标题,以及一个 PopupMenu 对象,用于显示菜单项。在构造函数中,该类接受一个菜单资源 ID,并使用 mPopupMenu.getMenuInflater().inflate() 方法从 XML 资源中加载菜单项,然后将菜单项添加到 mMenu 对象中。 public DropdownMenu(Context context, Button button, int menuId) { mButton = button; mButton.setBackgroundResource(R.drawable.dropdown_icon); mPopupMenu = new PopupMenu(context, mButton); mMenu = mPopupMenu.getMenu(); mPopupMenu.getMenuInflater().inflate(menuId, mMenu); mButton.setOnClickListener(v -> mPopupMenu.show()); // 重写了 setOnClickListener() 方法,以便在用户点击 Button 控件时显示下拉菜单。 } // 在 Button 控件上注册一个单击事件监听器,并在该监听器中实现下拉菜单的显示逻辑。 public void setOnDropdownMenuItemClickListener(OnMenuItemClickListener listener) { if (mPopupMenu != null) { mPopupMenu.setOnMenuItemClickListener(listener); } } // setOnDropdownMenuItemClickListener() 方法,用于设置菜单项的点击监听器。通过这个方法,应用程序可以在用户选择菜单项时执行相应的操作。 public MenuItem findItem(int id) { return mMenu.findItem(id); }//findItem() 方法用于查找指定 ID 的菜单项 public void setTitle(CharSequence title) { mButton.setText(title); }//用于设置菜单的标题。 }