Android开发技巧
文章平均质量分 51
披萨大叔
某程票贩子,主业做菜,副业代码,兼职铲屎官
展开
-
史上最简单教程:向第三方jar包注入自己的代码
我们经常使用第三方库,但当我们遇到一些个性化需求,第三方库没有预留接口的时候,怎么办?比如我们项目中用到友盟的社会化分享组件,但是友盟的分享对话框实在是丑!而他们又没有留下足够的接口支持我的个性化需求,比如我想给对话框加个圆角背景,库中并无该接口,怎么办?下面以“给友盟分享对话框加圆角背景”为例,介绍如何简单快速的将自己的代码注入第三方jar包中。代码定位首先我们要看第三方jar包的源码,定位到具体原创 2017-11-02 16:01:33 · 5595 阅读 · 0 评论 -
定时任务:Handler vs Timer
转自博客园,作者:Benhero,博客地址:http://www.cnblogs.com/benhero/在我们Android开发过程中,经常需要执行一些短周期的定时任务,这时候有两个选择Timer或者Handler。然而个人认为:Handler在多个方面比Timer更为优秀,更推荐使用。一.易用性1. 可重复执行Handler可以重复执行某个任务。Timer若在某个任转载 2016-03-31 09:49:02 · 1126 阅读 · 0 评论 -
自适应宽度的ListView
我们在用PopupWindow模拟PopupMenu的时候,经常想要ListView能自适应宽度,而如果在XML里设置ListView的属性为wrap_content并不能解决问题,所以我们需要做的只有重写ListView的onMeasure()方法,like this:@Override protected void onMeasure(int widthMeasureSpec, in原创 2016-03-21 19:20:23 · 3347 阅读 · 0 评论 -
View平移动画的正确写法
最近在给View加动画时,想让它从上到下,渐渐出来。然后一开始是这么写: <translate android:duration="500" android:fromYDelta="0%" android:toYDelta="100%" > <alpha android:durati原创 2016-03-22 20:20:04 · 3340 阅读 · 0 评论 -
内存泄漏检测工具—LeakCanary的配置和使用
提起内存泄漏,感觉可以说一辈子。这是个老生常谈的话题,也是Android新手容易忽略的一点。为了避免OOM,我们尽量要把内存泄漏扼杀在摇篮里,不然OOM以后,再回头去补漏,如同大海捞针。LeakCanary绝对是内存泄漏大杀器,一言不合先上图~发现内存泄漏后,通知栏会提醒:点开后长这样:继续点击,这里的定位不是代码行,而是某个类引起了泄漏,比如我这张图:可以点开”+”号看看,上面说我有一个map实例原创 2016-03-30 10:40:57 · 3754 阅读 · 2 评论 -
如何使用Xpose绕过APP自定义证书验证去抓Https包
我们团队在开发过程中,测试接口时,常使用fiddler抓包查看请求报文和响应报文快速定位问题所在,这可比在代码中打断点看数据高效一万倍……然而fiddler只能抓http包,如果是https,有可能因为证书问题抓不到包。而这种场景一般都出现在,需要黑别家app,查看一些小秘密。没错,这次我们由于业务需要,得分析某竞品,自然不能倒在这抓包的第一步,所以下面记录下使用Xpose绕过自定义证原创 2018-01-18 11:59:11 · 11010 阅读 · 1 评论 -
Android后台模拟点击探索(附源码)
本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布工作中我们需要自制一套工具,其中遇到需要模拟点击事件的需求,类似按键精灵的功能,支持后台持续运行,满足触发条件时完成点击。经过一番探索,一共整理出两种不同的方案:AccessibilityService 和 adb shell命令,读者可自行选择合适的场景。AccessibilityService无障碍模式是我首原创 2018-01-24 11:04:37 · 33902 阅读 · 13 评论 -
TextView图文混排——让图片居中跟在文字之后
项目中UI给提了个需求,这里用草图示意:上图圆形是一个logo图片,UI想让logo永远紧跟标题居中显示,不然标题在多行时,logo单独居中特别丑。看似简单的需求,着实难着了我,因为只要是使用TextView和ImageView,他们就是两个对象,没法相亲相爱在一起啊……直到某天编辑文档时突然想到,可以用TextView的图文排版功能啊!单独对字体进行处理,在字体后追加图就行了。这...原创 2018-01-19 16:09:41 · 1745 阅读 · 0 评论 -
Eclipse批量修改包名
楼主爱瞎折腾,这不,今天突然觉得自己的包结构有点混乱,就按模块重新挪了挪,结果红叉一片,这里也是楼主太菜,没办法只能开始补救。 第一步:Search–>File第二步:在Containing text里填需要修改的包名(错的包名),在File name patterns里填入 * .java 或者 * ,这要取决于,你的类有没有在XML里使用,如果是自定义控件,肯定在XML里也有引用,那就用原创 2016-05-06 09:26:22 · 3594 阅读 · 0 评论 -
关于Popup的一些技巧
如果想实现单击Popupwindow外,它不消失,只要干掉这两行代码:ColorDrawable cd = new ColorDrawable(0x00000000);setBackgroundDrawable(cd);并且不能有setFocusable(true);不然Popupwindow弹出后,点击屏幕其他地方,无响应。反之,如原创 2016-03-03 21:02:10 · 418 阅读 · 0 评论 -
位运算在Android Flag中的巧妙使用
我们都知道Android源码,博大精深,但似乎还有一些细节被我们忽略。一、诡异的Flag从以前就发觉,android源码中一些Flag设置的很诡异,比如WindowManager.LayoutParams中的一些Flag:public static final int FLAG_ALLOW_LOCK_WHILE_SCREEN_ON = 0x00000001;public static fi原创 2016-08-25 20:32:02 · 3039 阅读 · 0 评论 -
Android性能分析工具Traceview的使用
如何使用TraceView使用TraceView主要有两种方式:最简单的方式就是如上图,直接打开DDMS,选择一个进程,然后按上面的“Start Method Profiling”按钮,等红色小点变成黑色以后就表示TraceView已经开始工作了。然后我就可以滑动一下列表(现在手机上的操作肯定会很卡,因为Android系统在检测Dalvik虚拟机中每个Java方法的调用,这是我猜测的)。操作最好不要转载 2016-06-14 16:02:22 · 511 阅读 · 0 评论 -
chrome插件-postman使用说明(附资源)
先给资源地址:http://download.csdn.net/detail/qq_27258799/9541074安装说明解压postman插件。进入chrome浏览器,打开菜单 –>更多工具 –>扩展程序。勾上开发者模式,点击“加载已经解压的扩展程序”,选择解压后的文件夹postman,OK!使用说明地址栏输入: chrome://apps/ ,回车可以看到postman,点击进去即原创 2016-06-04 18:45:42 · 5146 阅读 · 0 评论 -
用枚举构造完成资源绑定
如下图,我们如果想要实现这样一个布局,ListView每个item有两个ImageView和两个TextView,初始化的时候,这些图标资源和文字都要赋值,也就是说,这些资源都是需要我们可以配置的,如果把这些个资源绑定到一起?用一堆数组?用XML?到目前为止,最好的方式我认为还是枚举构造:public enum ListViewItem{ /** * 待处理工单 */原创 2016-05-27 09:39:12 · 493 阅读 · 0 评论 -
用addOnGlobalLayoutListener获取View的宽高
首先,我们在onCreate方法里调用getHeight()和 getWidth()是不能正确获取View的宽高的,因为onCreate方法执行完了,我们定义的控件才会被onMeasure()度量,所以我们在onCreate方法里面通过view.getHeight()获取控件的高度或者宽度肯定是0。因此我们想要获取View宽高的正确方法应该是这几种:方法一:int w = View.MeasureS转载 2016-05-16 20:29:59 · 6163 阅读 · 0 评论 -
判断ListView到达顶端的方法
在写下拉刷新ListView时,需要用到判断ListView是否到达最顶端,进而判断是否开始滑动刷新,下面只是判断这一过程的核心方法: /** * 判断第一个child是否完全显示出来 * * @return true完全显示出来,否则false */ private boolean isFirstItemVisible() { fi原创 2016-05-09 13:57:48 · 2134 阅读 · 0 评论 -
LinearLayout动态加载Button方案
重构外勤代码过程中遇到这样的场景:有一个ListView,加载的是工单数据。每一个Item中会有若干Button,Button的多少以及具体是什么功能都跟工单的状态有关。要做到灵活多变,因为经常会有需求变更,不同状态对应不同的按钮。比如:工单待接收状态下,要求绑定退回跟接收按钮;接收状态下要求绑定退回,延期申请,完工上报按钮等等。个人设计的方案如下:用XML文件配好不同状态对应的可能出现的原创 2016-03-07 23:12:41 · 1031 阅读 · 0 评论 -
类似android点击5次出现开发者选项的功能
今天看新奥工程的代码,发现他们登录界面,点击5次版本号,才会出现登录设置界面,类似于开发者选项,感觉还蛮有意思,记录一下。原理如下:自定义一个空数组,每次把数组整体向前移动一位,然后给数组最后一位赋值一个时间数,当SystemClock.uptimeMillis() 与数组第一位之间的时间差小于1秒时,生效。mHints = new long[5];原创 2016-03-03 21:04:34 · 4248 阅读 · 0 评论 -
Fragment经典问题——内存销毁导致fragment重叠
今天QA提了一个bug,说我们的程序首页怎么突然像一堆翔一样……我刚要发作,看了看她的屏幕,真TM像一堆翔,所有页面都重叠在了一起!WTF!讲真,做Android这么久还是第一次遇到fragment重叠的问题,之前只看过一些资料,这次终于赶上活的了!来分析下原因。我们首页是一个FragmentActivity,里面有四个Fragment,通过show和hide维护各个页面。当内存不足时,我...原创 2018-05-28 22:23:43 · 2607 阅读 · 0 评论