From 9327ff9a1cce12197263d65fd03a35063d6c08a8 Mon Sep 17 00:00:00 2001 From: pq5n3hobs Date: Thu, 19 Dec 2024 20:57:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E4=BB=A3=E7=A0=816?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DropdownMenu.java | 82 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 DropdownMenu.java diff --git a/DropdownMenu.java b/DropdownMenu.java new file mode 100644 index 0000000..76167e2 --- /dev/null +++ b/DropdownMenu.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package net.micode.notes.ui; + +import android.content.Context; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.Button; +import android.widget.PopupMenu; +import android.widget.PopupMenu.OnMenuItemClickListener; + +import net.micode.notes.R; + +// DropdownMenu类用于创建一个下拉菜单的功能组件,通常可以与界面上的某个按钮关联,点击按钮时弹出包含一系列菜单项的下拉菜单 +// 方便用户进行多种相关操作的选择,并且可以设置菜单项的点击监听器以及对菜单相关属性进行操作 +public class DropdownMenu { + + // 用于关联显示下拉菜单的按钮组件,这个按钮在界面上可见,用户点击它来触发下拉菜单的显示 + private Button mButton; + // 代表弹出式下拉菜单的实例,通过它可以进行菜单相关的操作,如设置菜单项、显示菜单以及设置菜单项点击监听器等 + private PopupMenu mPopupMenu; + // 用于获取和操作具体的菜单对象,包含了所有添加到下拉菜单中的菜单项,可以通过它来查找、操作具体的某个菜单项等 + private Menu mMenu; + + // 构造方法,用于初始化DropdownMenu实例,接收上下文对象(Context)、关联的按钮组件(Button)以及菜单资源ID(int类型的menuId)作为参数 + public DropdownMenu(Context context, Button button, int menuId) { + // 将传入的按钮组件赋值给成员变量mButton,以便后续对这个按钮进行相关操作,比如设置背景、添加点击监听器等 + mButton = button; + // 设置按钮的背景资源为指定的drawable资源(通过R.drawable.dropdown_icon获取),这里应该是一个表示下拉箭头之类的图标,用于提示用户此按钮可展开下拉菜单 + mButton.setBackgroundResource(R.drawable.dropdown_icon); + + // 创建一个PopupMenu实例,传入上下文对象和关联的按钮组件,这样当下拉菜单显示时会基于这个按钮的位置进行弹出显示 + mPopupMenu = new PopupMenu(context, mButton); + + // 获取PopupMenu中的Menu对象,后续通过这个对象来操作具体的菜单项,比如添加、删除菜单项或者查找特定菜单项等 + mMenu = mPopupMenu.getMenu(); + + // 使用菜单填充器(MenuInflater)将指定资源ID(menuId)对应的菜单布局资源文件填充到Menu对象中,实现菜单的初始化,添加具体的菜单项内容 + mPopupMenu.getMenuInflater().inflate(menuId, mMenu); + + // 为关联的按钮组件(mButton)设置点击监听器,当用户点击按钮时,触发onClick方法,在该方法内显示弹出式下拉菜单(mPopupMenu) + mButton.setOnClickListener(new OnClickListener() { + public void onClick(View v) { + mPopupMenu.show(); + } + }); + } + + // 用于设置下拉菜单中菜单项的点击监听器,外部类可以实现OnMenuItemClickListener接口并传入相应的实现类实例 + // 当用户点击下拉菜单中的某个菜单项时,会触发相应的逻辑处理,例如执行不同的业务操作等 + public void setOnDropdownMenuItemClickListener(OnMenuItemClickListener listener) { + if (mPopupMenu!= null) { + mPopupMenu.setOnMenuItemClickListener(listener); + } + } + + // 用于查找并返回指定ID对应的菜单项对象(MenuItem),方便外部类根据菜单项的ID来获取特定菜单项,进而进行一些操作,比如获取菜单项属性、设置菜单项状态等 + public MenuItem findItem(int id) { + return mMenu.findItem(id); + } + + // 用于设置关联按钮(mButton)上显示的文本内容(标题),可以根据业务需求动态改变按钮上显示的提示文字,方便用户了解下拉菜单的大致功能或相关信息 + public void setTitle(CharSequence title) { + mButton.setText(title); + } +} \ No newline at end of file