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.
MiNote/ui/DropdownMenu.java

93 lines
2.8 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.

/*
* 版权所有 (c) 2010-2011The MiCode Open Source Community (www.micode.net)
*
* 本软件根据 Apache 许可证 2.0 版("许可证")发布;
* 除非符合许可证,否则不得使用此文件。
* 您可以在以下网址获取许可证副本:
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 除非法律要求或书面同意,软件
* 根据许可证分发的内容按"原样"提供,
* 不附带任何明示或暗示的保证或条件。
* 请参阅许可证,了解有关权限和限制的具体语言。
*/
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;
/**
* 下拉菜单组件封装PopupMenu功能
* 功能:
* 1. 将按钮与PopupMenu关联点击按钮显示下拉菜单
* 2. 支持菜单项点击事件监听
* 3. 提供查找菜单项和设置按钮标题的接口
*/
public class DropdownMenu {
private Button mButton; // 触发下拉菜单的按钮
private PopupMenu mPopupMenu; // 弹出式菜单
private Menu mMenu; // 菜单项集合
/**
* 构造方法:初始化下拉菜单
* @param context 上下文
* @param button 触发菜单的按钮
* @param menuId 菜单布局资源ID
*/
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 标题文本
*/
public void setTitle(CharSequence title) {
mButton.setText(title);
}
}