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.
git.text/src/java/net/micode/notes/ui/DropdownMenu.java

92 lines
3.2 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;
/**
* 构造方法:初始化下拉菜单
* @param context 上下文对象,用于访问资源和创建视图
* @param button 触发下拉菜单的按钮
* @param menuId 菜单资源ID定义在res/menu目录下
*/
public DropdownMenu(Context context, Button button, int menuId) {
mButton = button;
// 设置按钮背景为下拉图标(箭头图标)
mButton.setBackgroundResource(R.drawable.dropdown_icon);
// 初始化PopupMenu绑定到触发按钮
mPopupMenu = new PopupMenu(context, mButton);
// 获取菜单容器
mMenu = mPopupMenu.getMenu();
// 从资源文件加载菜单项到菜单容器
mPopupMenu.getMenuInflater().inflate(menuId, mMenu);
// 设置按钮点击事件:点击时显示下拉菜单
mButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
mPopupMenu.show();
}
});
}
/**
* 设置下拉菜单项的点击事件监听器
* @param listener 监听器对象,处理菜单项点击逻辑
*/
public void setOnDropdownMenuItemClickListener(OnMenuItemClickListener listener) {
if (mPopupMenu != null) {
mPopupMenu.setOnMenuItemClickListener(listener);
}
}
/**
* 根据ID查找菜单中的具体选项
* @param id 菜单项的资源ID
* @return 对应的MenuItem对象可用于修改状态如勾选、隐藏
*/
public MenuItem findItem(int id) {
return mMenu.findItem(id);
}
/**
* 设置触发按钮的显示文本
* @param title 要显示的文本(如"已选择3项"
*/
public void setTitle(CharSequence title) {
mButton.setText(title);
}
}