You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
note/DropdownMenu.java

139 lines
5.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*
* 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);
}
}