万丈红尘千杯酒,
千秋霸业一壶茶。
ListView 的 getView 在每个 item 进入屏幕前都会调用,但 RecyclerView 的 onBindViewHolder 的调用与是否进入屏幕无关。如果在 RecyclerView 中想根据是否进入屏幕来做某些操作的话,应该调用 onViewAttachedToWindow 和 onViewDetachedFromWindow。
在使用 ImageSpan 或 调用 Drawable.draw(Canvas) 等场景下, 我们必须手动调用 Drawable.setBounds() 来确定 drawable 的 bounds。
虽然我们可以通过 Drawable.getIntrinsicWidth() 和 Drawable.getIntrinsicHeight() 来获取其真实的宽高,但其 bounds 默认并不是 (0, 0, Drawable.getIntrinsicWidth(), Drawable.getIntrinsicHeight());
如果你发现你的 ImageSpan 不显示,或者 Drawable.draw(Canvas) 没有任何效果,那多半是因为你忘记调用 Drawable.setBounds() 了。
Android 中 ViewPager 所使用的 PageAdapter 的 getCount 返回值不能为 Integer.MAX_VALUE,也应当避免其值过大,因为其值越大,ViewPager.populate() 所耗费的时间越久,如果为 Integer.MAX_VALUE, 基本上陷入死循环而出现 ANR 了。
Android 中 View 的 setBackground 系列操作会使得 View 的 padding 变为 0,因此在 setBackground 前要想清楚是否需要先用临时变量 padding 给保存起来,之后再还原回去。
Android 很多地方用到了Gravity,并且是可以通过位运算叠加效果,例如 Gravity.Left | Gravity.Top,但是当我们需要判断变量 gravity 的值时,我们不能简单的通过 & 操作,而先要用 Gravity.HORIZONTAL_GRAVITY_MASK 或者 Gravity.VERTICAL_GRAVITY_MASK 进行mask
错误:(gravity & Gravity.Left) == Gravity.Left
正确:int horGravity = gravity & Gravity.HORIZONTAL_GRAVITY_MASK; (horGravity & Gravity.Left) == Gravity.Left
Android 5之前的版本,TextView 多行并设置了 lineSpaceExtra 的情况下,最后一行也会被添加上 lineSpaceExtra,目前也没找到全局修改的方式,只能在使用的地方用负的 bottomMargin 去对齐设计稿