1、Throwable接口中的getStackTrace()方法,根据这个方法可以得到函数的逐层调用地址,其返回值为StackTraceElement[];
2、StackTraceElement类,其中四个方法getClassName(),getFileName(),getLineNumber(),getMethodName()在调试程序打印Log时非常有用;
3、UncaughtExceptionHandler接口,再好的代码异常难免,利用此接口可以处理未捕获的异常;
4、View中的isShown()方法,以前都是用view.getVisibility() ==View.VISIBLE来判断的
5、Arrays类中的asList(T… array)方法,数组转List集合List.toArray();
6、Fragment类中的onHiddenChanged(boolean)方法,使用FragmentTransaction中的hide(),show()时貌似Fragment的其它生命周期方法都不会被调用,太坑爹!
7、TextView类中的setTransformationMethod(TransformationMethod)方法,可用来实现“显示密码”功能;
8、PageTransformer接口,用来自定义ViewPager页面切换动画,用setPageTransformer(boolean, PageTransformer)方法来进行设置;
9、android:weightSum (LinearLayout)——如果想使用 layout weights,但是却不想填充整个 LinearLayout 的话,就可以用 weightSum 来定义总的 weight 大小。
10、android:duplicateParentState (View)——此方法可以使得子 View 可以复制父 View 的状态。比如如果一个 ViewGroup 是可点击的,那么可以用这个方法在它被点击的时候让它的子 View 都改变状态。
11、android:clipChildren (ViewGroup)——如果此属性设置为不可用,那么 ViewGroup 的子 View 在绘制的时候会超出它的范围,在做动画的时候需要用到。
12、android:fillViewport (ScrollView)——在这片文章中有详细介绍文章链接,可以解决在 ScrollView 中当内容不足的时候填不满屏幕的问题。
13、android:tileMode (BitmapDrawable)——可以指定图片使用重复填充的模式。
14、android:enterFadeDuration/android:exitFadeDuration (Drawables)——此属性在 Drawable 具有多种状态的时候,可以定义它展示前的淡入淡出效果。
15、ViewDragHelper ——视图拖动是一个比较复杂的问题。这个类可以帮助解决不少问题。如果你需要一个例子,DrawerLayout就是利用它实现扫滑。Flavient Laurent 还写了一些关于这方面的优秀文章。
16、View.generateViewId()——每次我都想要推荐动态生成控件的ID。需要注意的是,不要和已经存在的控件ID或者其他已经生成的控件ID重复。
17、ActivityManager.clearApplicationUserData()—— 一键清理你的app产生的用户数据,可能是做用户退出登录功能,有史以来最简单的方式了。
18、Context.createConfigurationContext() ——自定义你的配置环境信息。我通常会遇到这样的问题:强制让一部分显示在某个特定的环境下。用这个实现起来可以稍微简单一点。
19、ActivityOptions ——方便的定义两个Activity切换的动画。 使用ActivityOptionsCompat 可以很好解决旧版本的兼容问题。
20、ViewParent.requestDisallowInterceptTouchEvent() ——Android系统触摸事件机制大多时候能够默认处理,不过有时候你需要使用这个方法来剥夺父级控件的控制权
21、ArgbEvaluator.evaluate(float fraction, Object startValue, Object endValue);用于根据一个起始颜色值和一个结束颜色值以及一个偏移量生成一个新的颜色,分分钟实现类似于微信底部栏滑动颜色渐变。
22、Canvas中clipRect、clipPath和clipRegion剪切区域的API。
23、Bitmap.extractAlpha ();返回一个新的Bitmap,capture原始图片的alpha值。有的时候我们需要动态的修改一个元素的背景图片又不希望使用多张图片的时候,通过这个方法,结合Canvas和Paint可以动态的修改一个纯色Bitmap的颜色。
24、HandlerThread,代替不停new Thread开子线程的重复体力写法。
25、IntentService,一个可以干完活后自己去死且不需要我们去管理子线程的Service。
26、Palette,5.0加入的可以提取一个Bitmap中突出颜色的类,结合上面的Bitmap.extractAlpha,你懂的。
27、PointF,graphics包中的一个类,我们经常见到在处理Touch事件的时候分别定义一个downX,一个downY用来存储一个坐标,如果坐标少还好,如果要记录的坐标过多那代码就不好看了。用PointF(float x, float y);来描述一个坐标点会清楚很多。
28、StateListDrawable,定义Selector通常的办法都是xml文件,但是有的时候我们的图片资源可能是从服务器动态获取的,比如很多app所谓的皮肤,这种时候就只能通StateListDrawable
来完成了,各种addState即可。
29、android:descendantFocusability,ListView的item中CheckBox等元素抢焦点导致item点击事件无法响应时,除了给对应的元素设置 focusable,更简单的是在item根布局加上android:descendantFocusability=”blocksDescendants”
30、TimingLogger,SDK自带打印时间戳工具,简直神器。
摘自官方文档:
A utility class to help log timings splits throughout a method call. Typical usage is:
TimingLogger timings = new TimingLogger(TAG, “methodA”);
// … do some work A … timings.addSplit(“work A”);
// … do some work B … timings.addSplit(“work B”);
// … do some work C … timings.addSplit(“work C”); timings.dumpToLog();
The dumpToLog call would add the following to the log:
D/TAG ( 3459): methodA: begin
D/TAG ( 3459): methodA: 9 ms, work A
D/TAG ( 3459): methodA: 1 ms, work B
D/TAG ( 3459): methodA: 6 ms, work C
D/TAG ( 3459): methodA: end, 16 ms
31、fragment + viewPager 写tab菜单,因为做一个提交类的app,可能数据还没填写完就滑去另一个fragment,回来数据有时候会掉。查了好多值资料后明白这是由于fragment的缓存机制决定的。默认情况下,viewpager切换页面时会缓存上一个页面,非相邻页面被销毁
viewPaper.setOffscreenPageLimit(2) 设置默认缓存fragment数目为2则解决
32、setUserVisibleHint getUserVisibleHint 判断fragment是否可见