|
|
/*
|
|
|
* Copyright (c) 2010 - 2011, The MiCode Open Source Community (www.micode.net)
|
|
|
* 版权声明部分,表明该代码遵循Apache License 2.0协议,同时说明了版权所属的开源社区以及相关许可的获取途径等信息。
|
|
|
*/
|
|
|
|
|
|
/*
|
|
|
* 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.
|
|
|
*/
|
|
|
|
|
|
// 声明该类所属的包名,表明这个类位于net.micode.notes.ui包下,在项目的整体包结构中有其特定的组织和访问层级关系。
|
|
|
package net.micode.notes.ui;
|
|
|
|
|
|
// 导入必要的Android系统相关类,Context用于获取应用的上下文环境信息,是很多Android操作(如资源获取、系统服务调用等)的基础。
|
|
|
import android.content.Context;
|
|
|
// 导入用于操作菜单相关的类,Menu用于表示菜单对象,包含了菜单项等相关信息;MenuItem用于表示具体的菜单项,可以设置其属性、响应点击事件等。
|
|
|
import android.view.Menu;
|
|
|
import android.view.MenuItem;
|
|
|
// 导入View相关类,View是Android中所有可视化组件的基类,这里用于处理视图相关的操作和事件监听等;
|
|
|
// OnClickListener用于监听视图的点击事件,以便在视图被点击时执行相应的逻辑。
|
|
|
import android.view.View;
|
|
|
import android.view.View.OnClickListener;
|
|
|
// 导入Button类,用于创建按钮控件,按钮是常见的用户交互组件,可响应用户点击操作等。
|
|
|
import android.widget.Button;
|
|
|
// 导入PopupMenu相关类,PopupMenu用于创建弹出式菜单,提供一种在特定视图(通常是某个按钮等)上点击弹出菜单选项的交互方式;
|
|
|
// OnMenuItemClickListener用于监听弹出式菜单中菜单项的点击事件,以便执行相应的业务逻辑。
|
|
|
import android.widget.PopupMenu;
|
|
|
import android.widget.PopupMenu.OnMenuItemClickListener;
|
|
|
|
|
|
// 导入项目中自动生成的资源类R,通过它可以访问项目中的各种资源(如布局文件、图片资源、字符串资源等),这里主要用于获取特定的图片资源。
|
|
|
import net.micode.notes.R;
|
|
|
|
|
|
// DropdownMenu类用于创建一个带有弹出式菜单功能的组件,它关联一个按钮(Button),点击该按钮会弹出一个菜单(PopupMenu),
|
|
|
// 并且可以对菜单的相关属性(如菜单项点击监听、查找菜单项、设置按钮显示文本等)进行操作,方便在Android应用中实现下拉菜单式的交互功能。
|
|
|
public class DropdownMenu {
|
|
|
// 定义一个Button类型的成员变量mButton,用于存储关联的按钮控件,这个按钮将作为触发弹出式菜单显示的入口。
|
|
|
private Button mButton;
|
|
|
// 定义一个PopupMenu类型的成员变量mPopupMenu,用于存储创建的弹出式菜单对象,通过这个对象可以进行弹出菜单的显示、设置菜单项点击监听等操作。
|
|
|
private PopupMenu mPopupMenu;
|
|
|
// 定义一个Menu类型的成员变量mMenu,用于存储弹出式菜单对应的菜单对象,通过它可以访问和操作菜单中的具体菜单项(如添加、查找、移除菜单项等)。
|
|
|
private Menu mMenu;
|
|
|
|
|
|
// DropdownMenu类的构造函数,用于创建该类的实例,接收三个参数:
|
|
|
// Context类型的context用于获取应用的上下文环境信息,以便能够正确加载资源、创建相关的系统组件等;
|
|
|
// Button类型的button是要关联的按钮控件,点击这个按钮将弹出菜单;
|
|
|
// int类型的menuId是菜单资源的ID,用于指定要加载并显示的菜单布局资源(通常在XML文件中定义了具体的菜单项等内容)。
|
|
|
public DropdownMenu(Context context, Button button, int menuId) {
|
|
|
// 将传入的按钮控件参数button赋值给成员变量mButton,建立与外部传入按钮的关联,后续通过这个成员变量对按钮进行相关操作(如设置背景、添加点击监听等)。
|
|
|
mButton = button;
|
|
|
// 通过调用setBackgroundResource方法,为按钮(mButton)设置背景图片资源,这里使用了R.drawable.dropdown_icon所对应的图片资源,
|
|
|
// 该图片通常会作为按钮的可视化标识,提示用户点击它可以弹出菜单,使按钮在界面上有符合功能需求的外观显示。
|
|
|
mButton.setBackgroundResource(R.drawable.dropdown_icon);
|
|
|
// 创建一个PopupMenu实例,传入应用的上下文环境context和关联的按钮控件mButton,这样创建的弹出式菜单会在点击mButton时弹出,并且依赖于传入的上下文环境进行相关操作(如资源加载等)。
|
|
|
mPopupMenu = new PopupMenu(context, mButton);
|
|
|
// 获取创建好的弹出式菜单(mPopupMenu)对应的菜单对象,并赋值给成员变量mMenu,通过这个对象后续可以对菜单中的具体菜单项进行操作(如添加、查找等)。
|
|
|
mMenu = mPopupMenu.getMenu();
|
|
|
// 通过弹出式菜单(mPopupMenu)的getMenuInflater方法获取菜单填充器对象,然后调用inflate方法,传入菜单资源ID(menuId)和菜单对象(mMenu),
|
|
|
// 这一步操作会根据指定的菜单资源ID对应的XML布局文件内容,将菜单项填充到mMenu对象中,从而构建出具有实际菜单项的菜单结构,用于后续展示给用户选择操作。
|
|
|
mPopupMenu.getMenuInflater().inflate(menuId, mMenu);
|
|
|
// 为按钮(mButton)设置点击事件监听器,当按钮被点击时,会触发监听器中的onClick方法,在这个方法内部,通过调用mPopupMenu的show方法,
|
|
|
// 实现弹出式菜单的显示,使得用户点击按钮后能看到弹出的菜单供其选择相应的菜单项,实现下拉菜单的基本交互功能。
|
|
|
mButton.setOnClickListener(new OnClickListener() {
|
|
|
public void onClick(View v) {
|
|
|
mPopupMenu.show();
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
// 用于设置弹出式菜单中菜单项点击事件监听器的方法,接收一个OnMenuItemClickListener类型的参数listener,
|
|
|
// 如果弹出式菜单(mPopupMenu)不为空,就将传入的监听器设置给mPopupMenu,使得当用户点击弹出菜单中的菜单项时,会触发listener中定义的相应逻辑,
|
|
|
// 以便执行根据菜单项选择而不同的业务操作(如跳转到不同页面、执行不同功能等)。
|
|
|
public void setOnDropdownMenuItemClickListener(OnMenuItemClickListener listener) {
|
|
|
if (mPopupMenu!= null) {
|
|
|
mPopupMenu.setOnMenuItemClickListener(listener);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 用于在菜单(mMenu)中查找指定ID的菜单项的方法,接收一个int类型的参数id,表示要查找的菜单项的资源ID,
|
|
|
// 通过调用mMenu对象的findItem方法,根据传入的ID查找对应的菜单项,并返回查找到的MenuItem对象,方便后续对该菜单项进行进一步操作(如获取其属性、设置其状态等)。
|
|
|
public MenuItem findItem(int id) {
|
|
|
return mMenu.findItem(id);
|
|
|
}
|
|
|
|
|
|
// 用于设置关联按钮(mButton)显示文本的方法,接收一个CharSequence类型的参数title,通过调用mButton的setText方法,
|
|
|
// 将传入的文本设置为按钮上显示的内容,这样可以根据不同的业务场景动态改变按钮上显示的提示信息,增强交互的友好性和表意性。
|
|
|
public void setTitle(CharSequence title) {
|
|
|
mButton.setText(title);
|
|
|
}
|
|
|
} |