最近在知乎上关注了这个问题:Android 开发中,有哪些坑需要注意?
里面有许多Android开发大神所讲的各种小点,对我来说非常有帮助。我在开发过程中有时候也会遇到一些小坑,因此在这里也贴一下。(也许就是自己用错了?(笑:))
- 自定义View
- 由于没对Painter设置线条Width,导致在canvas里面drawLine()没有显示效果(也可能是因为屏幕dpi太高?)
- surfaceView 每次拿到的canvas都不会清空,Path也是
- 由于不理解贝塞尔曲线控制点的含义,导致在canvas里绘制贝塞尔曲线时一直画不出曲线(这个是自己的学得太少(⊙﹏⊙)b)
- 在需要传context的时候,注意传的是哪个context,如果传的是ApplicationContext,则在在inflate的时候绘制出来的View会是系统默认样式,而在xml里定义的样式是无效的。
关于不同Context能干什么请看下图:
备注:大家注意看到有一些NO上添加了一些数字,其实这些从能力上来说是YES,但是为什么说是NO呢?下面一个一个解释:
1、数字1:启动Activity在这些类中是可以的,但是需要创建一个新的task,一般情况不推荐;2、数字2:在这些类中去layout inflate是合法的,但是会使用系统默认的主题样式,如果你自定义了某些样式可能不会被使用;
3、数字3:在Receiver为null时允许,在4.2或以上的版本中,用于获取黏性广播的当前值。(可以无视);
4、ContentProvider、BroadcastReceiver之所以在上述表格中,是因为在其内部方法中都有一个context用于使用。
来自知乎@张明云的答案
- 默认情况下Viewgroup 的onDraw方法不会被调用,除非设置willNowDraw为false
- RecyclerView.scrollToPosition()方法与LayoutManager.scrollToPositionWithOffset()方法的区别:如果在recyclerView里面调用scrollToPosition方法,则rv确实会滚动至该位置,但是这个方法只保证你要的position在可见范围内。但scrollToPositionWithOffset则保证了该position相对顶部有多少的offset,保证该position所在item相对Rv的位置。
- 在android4.1.1里使用?accent这个颜色会报错(其他Android版本未实验)