我平时项目开发必备框架
- Android上最强网络请求 Net
- Android上最强列表(包含StateLayout) BRV
- Android最强缺省页 StateLayout
- JSON和长文本日志打印工具 LogCat
- 支持异步和全局自定义的吐司工具 Tooltip
- 开发调试窗口工具 DebugKit
- 一行代码创建透明状态栏 StatusBar
PopupMenu和PopupWindow类似(但并不是继承关系), 可以显示固定在一个View下方, 且默认实现了弹出动画, 所以过渡也没有像PopupWindow那么僵硬. 可以说是为了实现弹出式菜单而封装的类.
该类在Android3.0(API11)开始添加, 对于3.0以前提供android.support.v7.widget.PopupMenu
向下兼容包.
PopupMenu的方法其实很少, 所以全部看一遍.
创建
创建并显示一个PopupMenu分为三个步骤
- 创建PopupMenu对象
- 填充一个Menu xml文件
- 显示
构造方法
PopupMenu (Context context, //上下文
View anchor) // 显示固定的View对象
PopupMenu (Context context,
View anchor,
int gravity) // 显示在View的左下方还是右下方. 默认左下方
PopupMenu (Context context,
View anchor,
int gravity,
int popupStyleAttr,
int popupStyleRes)
填充Menu
一般填充方式
popupMenu.getMenuInflater().inflate(menuRes, popupMenu.getMenu()).
Android4.0(API14)后新增的简化方法:
void inflate (int menuRes) // 直接传入Menu文件id即可
显示和隐藏
void show () // 显示
void dismiss () // 隐藏
监听器
PopupMenu关闭事件监听
void setOnDismissListener (PopupMenu.OnDismissListener listener)
菜单选项事件监听
void setOnMenuItemClickListener (PopupMenu.OnMenuItemClickListener listener)
滑动开打
这个方法蛮有意思的. 可以通过拖拽显示固定的View来打开PopupMenu.
View.OnTouchListener getDragToOpenListener ()
我觉得我需要演示下
public void onClick() {
PopupMenu popupMenu = new PopupMenu(this, mToolbar);
popupMenu.getMenuInflater().inflate(R.menu.popup_menu, popupMenu.getMenu());
mToolbar.setOnTouchListener(popupMenu.getDragToOpenListener());
popupMenu.show();
}
奇怪的是还得先点击打开PopupMenu后才能使用这个滑动选择
其他方法
设置PopupMenu显示位置
该方法PopupWindow同样有, 支持Gravity.LEFT
和Gravity.RIGHT
, 这类setGravity
的方法基本上都是Android6.0后添加的.
void setGravity (int gravity)
int getGravity ()