From 054f8f9581b0946d2060b0a3e355ffd7521c4743 Mon Sep 17 00:00:00 2001 From: pz96pqh8i <3326392379@qq.com> Date: Tue, 31 Dec 2024 02:06:33 +0800 Subject: [PATCH] ADD file via upload --- DropdownMenu.java | 138 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 DropdownMenu.java diff --git a/DropdownMenu.java b/DropdownMenu.java new file mode 100644 index 0000000..bd540f8 --- /dev/null +++ b/DropdownMenu.java @@ -0,0 +1,138 @@ +/* + * 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; + +public class DropdownMenu { + private Button mButton; + private PopupMenu mPopupMenu; + private Menu 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(new OnClickListener() { + public void onClick(View v) { + mPopupMenu.show(); + } + }); + } + + public void setOnDropdownMenuItemClickListener(OnMenuItemClickListener listener) { + if (mPopupMenu != null) { + mPopupMenu.setOnMenuItemClickListener(listener); + } + } + + public MenuItem findItem(int id) { + return mMenu.findItem(id); + } + + public void setTitle(CharSequence title) { + mButton.setText(title); + } +} + + + + + +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类用于创建一个下拉菜单的功能组件,它将一个Button按钮与一个PopupMenu(弹出式菜单)相关联, +// 点击按钮时会弹出对应的菜单,并且可以设置菜单选项的点击监听器、查找特定菜单项以及设置按钮显示的标题等操作。 +public class DropdownMenu { + + // 用于存储关联的Button按钮对象,该按钮作为触发弹出菜单显示的交互元素 + private Button mButton; + // 用于存储创建的PopupMenu(弹出式菜单)对象,承载具体的菜单内容和交互逻辑 + private PopupMenu mPopupMenu; + // 用于存储PopupMenu对应的Menu对象,方便后续对菜单本身进行一些操作,比如查找菜单项等 + private Menu mMenu; + + // 构造函数,用于初始化DropdownMenu实例,传入上下文、要关联的Button按钮以及菜单资源的ID + public DropdownMenu(Context context, Button button, int menuId) { + // 将传入的Button按钮对象赋值给成员变量mButton,以便后续操作 + mButton = button; + + // 为Button按钮设置背景资源,这里使用了资源文件中定义的drawable资源(dropdown_icon)作为按钮的背景图片, + // 通常用于展示一个下拉箭头之类的图标,提示用户该按钮可以点击弹出菜单 + mButton.setBackgroundResource(R.drawable.dropdown_icon); + + // 创建一个PopupMenu实例,传入当前上下文和关联的Button按钮,使得弹出菜单能够在合适的位置(以按钮为锚点)显示出来 + mPopupMenu = new PopupMenu(context, mButton); + + // 获取PopupMenu对应的Menu对象,并赋值给成员变量mMenu,方便后续操作菜单内容 + mMenu = mPopupMenu.getMenu(); + + // 使用MenuInflater(菜单填充器)将指定资源ID对应的菜单布局资源填充到创建的Menu对象中, + // 这样就构建好了具体的菜单结构,包含了各个菜单项等内容 + mPopupMenu.getMenuInflater().inflate(menuId, mMenu); + + // 为Button按钮设置点击事件监听器,当按钮被点击时触发相应逻辑 + mButton.setOnClickListener(new OnClickListener() { + // 实现OnClickListener接口的点击事件处理方法,当按钮被点击时 + public void onClick(View v) { + // 调用PopupMenu的show方法,显示弹出式菜单,使其展示在屏幕上供用户选择菜单项 + mPopupMenu.show(); + } + }); + } + + // 用于设置PopupMenu中菜单项的点击事件监听器,外部可以传入实现了OnMenuItemClickListener接口的实例, + // 来处理用户点击菜单项后的相应逻辑 + public void setOnDropdownMenuItemClickListener(OnMenuItemClickListener listener) { + if (mPopupMenu!= null) { + // 如果PopupMenu对象不为空,为其设置菜单项点击事件监听器,将传入的监听器对象关联到PopupMenu上 + mPopupMenu.setOnMenuItemClickListener(listener); + } + } + + // 用于在已构建的Menu对象中查找指定ID的菜单项,返回对应的MenuItem对象,方便外部对特定菜单项进行操作,比如获取其属性、设置其状态等 + public MenuItem findItem(int id) { + return mMenu.findItem(id); + } + + // 用于设置Button按钮显示的标题文本内容,改变按钮上展示给用户的文字提示信息 + public void setTitle(CharSequence title) { + mButton.setText(title); + } +}