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

95 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;
/**
* DropdownMenu 类用于实现一个带有下拉菜单的按钮组件。
* 按钮点击时会显示一个弹出菜单,菜单项点击时可以设置回调事件。
*/
public class DropdownMenu {
private Button mButton; // 存储与菜单关联的按钮
private PopupMenu mPopupMenu; // 存储弹出菜单对象
private Menu mMenu; // 存储菜单对象
/**
* 构造函数,初始化 DropdownMenu。
* @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();
// 根据给定的菜单ID加载对应的菜单资源
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 找到的菜单项
*/
public MenuItem findItem(int id) {
return mMenu.findItem(id); // 查找菜单项
}
/**
* 设置按钮的标题文本。
* @param title 新的按钮文本
*/
public void setTitle(CharSequence title) {
mButton.setText(title); // 设置按钮显示的文本
}
}