1. clipChildren & clipToPadding
区别:如果父布局有设置padding,那么想要子控件不被父布局裁剪,就需要用到clipToPadding。
用法:从子控件的爷爷节点开始,到子控件完整绘制需要的画布的持有者控件,都需要加clipChildren 或者 clipToPadding,主要还是要看子控件最终绘制到哪个控件的布局中
2. 无障碍
无障碍播报中如果一个TextView文案变化是没法自动播报的,若有无障碍焦点,需要手动调用View.announceForAccessibility播报,若无无障碍焦点,只需要重新获取焦点即可。
3. launcher 和singleTask
当launcher activity的启动模式是singleTask的时候,涉及到前后台切换,每次从后台切换到前台,都会导致上面的页面都被销毁,只显示launcher activity,详情参见 :https://blog.csdn.net/a1031359915/article/details/42212919
4. SeekBar动态设置ProgressDrawable
布局文件中设置了maxHeight,SeekBar动态设置ProgressDrawable后,高度会发生变化,需要再次设置bounds,具体解决方案:https://blog.csdn.net/yeyuwuhen1203/article/details/53101450
5. TextWatcher
如果用TextWatcher观察EditText内容输入,并且使用SpannbleString
改变其样式时候,网上所说的先移除监听改变样式然后setText
然后添加监听,是有问题的,会重置输入法;包括使用replace都不行。事实上TextWatcher回调中的字符串具体实现是SpannableStringBuilder直接转换类型,然后设置样式即可;清除样式时候一定要使用removeSpan。
6. 波纹点击效果
官方提供两种
- ?attr/selectableItemBackground 有边界的波纹
- ?attr/selectableItemBackgroundBorderless 无边界的波纹
7. RecyclerView竖屏多列
一行多列,等比均分时候,RecyclerView算每一个item占比,会加上divider设置的Rect
8. 重复依赖
如果遇见 Program type already present : xxx
这类重复依赖问题,正常情况下
- Clean project
- 清空Android Studio缓存
基本可以生效
但是如果不是重复依赖,但是依旧报这个错误,执行下面指令,清空build缓存
./gradlew cleanBuildCache
9. 动画
在补间动画或者属性动画过程中,设置View可见性,会不生效
10. Fragment构造函数问题
android 5.0以上,系统会自动崩溃重启,如果涉及到 Fragment
,在崩溃重启过程中,需要有一个public
的空构造函数,详情查看Fragment#instantiate
方法
11. CardView background
正常情况下,在XML布局文件中设置CardView
的background
是不生效的,但是代码动态设置可以生效,一旦生效后,CardView
的圆角就可能会被背景重叠,导致不生效问题。由于阴影的颜色深浅,可以根据背景透明度变化,所以如果要改变阴影深浅,需要外面套一层专门处理阴影的布局
12. CardView 裁圆角,有白边或者黑边
设置 CardView 的背景色 cardBackgroundColor
为透明