最近项目添加了一项调整应用字体大小功能,做完后空闲之余总结一下。本功能仿照微信应用“设置” - “通用” - “字体大小”功能,又有一点区别。据我所知,常见改变全局字体大小方法有两种,我把这两种分为可控和不可控,为什么这么分呢,当然不是为了方便记忆。那么简单说下两者方式的实现过程:
创新互联建站成立于2013年,先为珲春等服务建站,珲春等地企业,进行企业商务咨询服务。为珲春企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
1、不可控:通过重写Actiivity的getResources()方法更新应用的字体倍数来调整全局字体大小
2、可控:通过setTheme()方法,一开始就初始化设置不同风格的字体样式来更改全局字体大小。
而本文正式采用了第一种方案,主要是中途添加该功能,时间也不充裕,抽取字体大小又太过耗时。
微信字体大小个人猜测使用第二种方案,后者是更好的实现方式也不一定。
xml使用方式:
2、滑动按钮改变当前页面预览字体大小
3、返回时,保存放大倍数并重启应用
4、初始化应用时配置字体放大倍数。
源码地址:
到这里就结束啦。
弹出效果如下图所示
可以使用setGravity()方法来指定弹出窗口与anchor视图的对齐方式,例如修改对齐方式为Gravity.END
使用起来还是比较简单的,但是好像大部分项目的需求是PopupMenu在用户点击的位置弹出,然而PopupMenu并没有提供在指定坐标弹出的方法,所以只能咱们自己来实现咯!
想让PopupMenu在指定弹出位置,首先咱们得先了解show()方法是如何让PopupMenu弹出来的,所以只能去阅读源码了(Read The Fucking Source Code~)。
PopupMenu的show()方法很简单,直接把任务转给MenuPopupHelper来处理,处理流程:show() - tryShow() - showPopup(0, 0, false, false);
我们可以看到showPopup方法内有两个参数int xOffset、int yOffset,根据注释可以知道这就是相对于anchor视图的坐标值。所以如果要指定PopupMenu的弹出位置,MenuPopupHelper应该这样处理弹出逻辑:show(int x, int y) - tryShow(int x, int y) - showPopup(x, y, true, true)。
但是由于PopupMenu无法调用到MenuPopupHelper的show(int x, int y) 方法,因此我们只能使用反射机制绕过PopupMenu,直接调用MenuPopupHelper的show(int x, int y)方法。
到此为止,已经有了大致的解决思路,接下来看看具体实现。
最终弹出效果如下图所示
SelectLocation: 仿微信位置选择页面 (gitee.com)
仿微信位置选择页面
仿照微信做的位置选择
使用的是高德地图,使用的时候记得换成自己的包名和key
网站名称:android仿微信,Android仿微信界面
网站网址:https://www.cdcxhl.com/article40/dsseseo.html
成都网站建设公司_创新互联,为您提供标签优化、自适应网站、品牌网站制作、App开发、品牌网站建设、域名注册
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联