Android 4.0笔记——ActionMenuItemView长按反馈的实现
来源:互联网 发布:森马官方旗舰店淘宝 编辑:程序博客网 时间:2024/05/05 17:17
长按ActionBar中的Menu菜单,会弹出提示框(实际上是一个Toast),如下图所示。
现在来看看它的实现方式:
其中的Menu选项,实为ActionMenuItemView类(frameworks/base/core/java/com/android/internal/view/menu/ActionMenuItemView)。
ActionMenuItemView.onLongClick() 代码如下。
@Override public boolean onLongClick(View v) { if (hasText()) { // Don't show the cheat sheet for items that already show text. return false; } final int[] screenPos = new int[2]; final Rect displayFrame = new Rect(); getLocationOnScreen(screenPos); getWindowVisibleDisplayFrame(displayFrame); final Context context = getContext(); final int width = getWidth(); final int height = getHeight(); final int midy = screenPos[1] + height / 2; final int screenWidth = context.getResources().getDisplayMetrics().widthPixels; Toast cheatSheet = Toast.makeText(context, mItemData.getTitle(), Toast.LENGTH_SHORT); if (midy < displayFrame.height()) { // Show along the top; follow action buttons cheatSheet.setGravity(Gravity.TOP | Gravity.RIGHT, screenWidth - screenPos[0] - width / 2, height); } else { // Show along the bottom center cheatSheet.setGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, height); } cheatSheet.show(); return true; }
代码分析:
“hasText()”,判断该MenuItem是否已显示了文字。如果是,则不显示提示框;如果否,代码继续往下;
“getLocationOnScreen(int[] location)”,获取该MenuItem在整个屏幕内的绝对坐标,注意这个值是要从屏幕顶端算起,也就是包括了通知栏的高度。与这个方法类似的“getLocationInWindow(int[] location)”,它获取的是在当前窗口内的绝对坐标;
“getWindowVisibleDisplayFrame(Rect outRect)”,获取当前窗口的显示区域;
接下去的代码就是创建一个Toast,并设置它的Gravity及偏移量。
这段代码可以很容易移植到自己的控件中,以实现类似的长按反馈。
- Android 4.0笔记——ActionMenuItemView长按反馈的实现
- Android-触感反馈和声音反馈的效果实现
- Android带进度反馈的上传实现
- Android 用户反馈界面的实现
- android卸载反馈实现
- android卸载反馈实现
- android 实现应用卸载反馈
- android应用捕获运行异常发送反馈邮件的实现
- cocos2dx lua android按键反馈的消耗机制实现
- 【Android】- Android自定义View长按事件的实现
- Android ImageButton的使用 及长按Button的实现
- 线性反馈移位寄存器的实现
- Android 关于长按back键退出应用程序的实现
- Android 关于长按back键退出应用程序的实现
- 【Android】长按连续触发事件的实现方法
- Android的二维码功能实现以及长按识别二维码
- 【Android】长按连续触发事件的实现方法
- Android 椭圆路径 长按暂停动画的实现
- 一个简单的Excel操作类
- Reachability 检查网络状态
- 用行指针输出某一行的全部元素
- iOS -- 开发技巧(一)
- vs2010安装包制作
- Android 4.0笔记——ActionMenuItemView长按反馈的实现
- 您真的了解类型转换吗?
- NOVA-VOLUME 学习笔记
- 数字视频监控技术基本术语
- T-SQL 编码时应该注意的10个问题
- 指针数组和行指针作为形参时的区别
- lwip源码分析1------综述及设备驱动层
- “DllRegisterServer的调用失败”问题解决办法
- win 8 store app 易网新闻阅读器 隐私声明