热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

有关于AndroidMenu的一些小知识总结

首先不得不吐槽,笔者今天下午加晚上3个小时的大好时光就用在研究menu的琐碎事上了。。。原来觉得这些基础知识没什么问题,今天研究起来才发现都是坑,要吸取教训啊,注重基础!!首先想说一些关

首先不得不吐槽,笔者今天下午加晚上3个小时的大好时光就用在研究menu的琐碎事上了。。 。 原来觉得这些基础知识没什么问题,今天研究起来才发现都是坑,要吸取教训啊,注重基础!!

首先想说一些关于魅族的事,可能有些开发者用的是魅族的MX3 MX4,在做ActionBar的时候会发现这不对那不对,但是用了模拟机就发现没有问题,这是因为魅族的手机是深度定制的,用的不是ActionBar,而是他们自己的SmartBar,要做适配确实有点难,可以参考 http://blog.csdn.net/wwj_748/article/details/44588649 这篇文章,小巫写的还是很详细的,还有想写出好的ActionBar的效果的同学可以参考 郭大侠的http://blog.csdn.net/guolin_blog/article/details/26365683 向牛人致敬!

接下去就开始写笔者这一个下午的辛酸史了!

(1) 有关于overflow不显示图标的问题,这个可以通过反射解决。
public boolean onMenuOpened(int featureId, Menu menu) 
{
if (featureId == Window.FEATURE_ACTION_BAR && menu != null) 
{
if (menu.getClass().getSimpleName().equals("MenuBuilder")) 
{
try 
{
Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
m.setAccessible(true);
m.invoke(menu, true);
}
catch (Exception e) 
{
}
}
}

return super.onMenuOpened(featureId, menu);
}

具体逻辑就是通过反射改变MenuBuilder这个Class里的setOptionalIconsVisible方法,返回true。由此可见反射在android里还是很有用的。


(2) 笔者看了一些APP,有关于菜单可以分为两类(不考虑5.0的ToolBar),一类是类似于UC的,没有ActionBar,按下菜单键会弹出一个自定义的菜单,一般是通过PopupWindow实现的。这个只需要重写public boolean onMenuOpened(int featureId, Menu menu)方法就可以了,至于如何让PopupWindow可以点击,如何实现点击其他区域后PopupWindow消失,读者自行百度吧,毕竟这也不是这篇文章的重点,如果想知道的可以留言问我。


(3) ActionMode的使用,Android3.0以后推出了一种全新的Menu模式,ActionMode,具体大家可以参考http://blog.csdn.net/xyz_lmn/article/details/12754785。


(4) 关于Menu键和ActionBar的overflow的冲突。不知道大家在发开Menu的时候有没有遇到过一个问题,当你写了一个menu的xml(有overflow),在onCreateOptionsMenu()这个方法里加载,运行APP以后,点击ActionBar的overflow和点击Menu键,菜单弹出的位置不一样,一个是在右上角,一个是从底部弹出的,更要命的是,或者说笔者遇到的要命的问题是,按Menu键弹出的菜单,没有办法打开子菜单!!!这不是坑爹吗。。后来笔者百度了一下下,发现还是要通过反射解决。

private void setOverflowShowingAlways() 
{
try 
{
ViewConfiguration cOnfig= ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(config, false);

catch (Exception e)
{
e.printStackTrace();
}
}

具体逻辑也就是通过反射拿到sHasPermanentMenuKey这个字段,设置为false,这样就OK了!


好了以上就是笔者今天研究的成果,其实说实话原来我觉得对于这些问题我是不在话下的,毕竟像setOverflowShowingAlways()这种方法,看郭大侠的文章的时候就已经记住了,但是真的遇到了问题,才发现自己是多蠢!以后还是要多写代码啊,光靠记是记不住的,而且容易混淆。


最后,希望明天骑士能进东绝!!!go cavs!!


推荐阅读
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 基于移动平台的会展导游系统APP设计与实现的技术介绍与需求分析
    本文介绍了基于移动平台的会展导游系统APP的设计与实现过程。首先,对会展经济和移动互联网的概念进行了简要介绍,并阐述了将会展引入移动互联网的意义。接着,对基础技术进行了介绍,包括百度云开发环境、安卓系统和近场通讯技术。然后,进行了用户需求分析和系统需求分析,并提出了系统界面运行流畅和第三方授权等需求。最后,对系统的概要设计进行了详细阐述,包括系统前端设计和交互与原型设计。本文对基于移动平台的会展导游系统APP的设计与实现提供了技术支持和需求分析。 ... [详细]
author-avatar
容容1217_778
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有