花了几个月的时间写校园通–华师匣子,在写的过程中碰到了一些问题,有些比较常见,所以就写个博客总结下在做项目过程中碰到的问题。后续随着版本的更新还会补充。
1.view相关
Q:Toolbar 有时候会出现 navigationicon不会居中的情况
A:这时后要设置Toolbar 的minHeight 和layout_height相同, Toolbar 控件的文档里面说明了这种情况。
Toolbar supports a more focused feature set than ActionBar. From start to end, a toolbar may contain a combination of the following optional elements:A navigation button…..The navigation button is vertically aligned within the Toolbar’s minimum height, if set.
Q:如何动态更新 menu
A:在 onPrepareOptionMenu中写上相应的显示逻辑,这个方法是在每次展现menu时调用。
Q:当登录页有背景大图时,为了让输入框不被键盘挡住会把windowSoftInputMode设置为adjustResize,但这样直接放背景图时会被压缩。
A:较好的解决办法有两种。
如果是全屏背景则直接把加入下面一行代码
|
|
因为 window 在最外层,而键盘弹出时从DecorView开始Resize,其父布局的长宽仍保持不变,所以背景图不会被压缩。
如果是只需要在root_layout下的子布局中填充背景图片时,则使用以下布局
|
|
尽管ScrollView被压缩了,但里面的子 View 并不会被压缩,为了防止里面的 view 滑动可以在代码中把 ScrollView 的触摸事件给屏蔽掉。
Q:在 java 代码中添加 view 时设置 margin 属性
A: 这个问题在最开始的时候碰到过,如果直接按下列代码写则不会起作用
|
|
正确的写法
|
|
Q:ScrollView初始下移一段距离以及SwipeRefreshLayout初始状态为刷新。
A:如果直接写scrollTo(),setRefreshing()有可能 view 还没绘制好执行该函数不会起作用,应加入到对应view的事件队列里,这样 view 绘制完后就会执行相应逻辑。
Q:RecyclerView的状态按钮状态混乱
A:因为RecyclerView 会复用 itemView,所以解决的方法是定义一个类型为List
2.数据库
Q:数据库版本错误
A:当要重新调试时,往往新版本的数据库会与旧版本的数据库产生冲突,然而调试的时候基本上不会改数据库版本,只有正式上线后要更新 app 时才会更改数据库版本,以防 app 更新包装到用户手机后产生冲突。所以在调试时要注意数据库的版本问题,有时候更改了数据结构要把 app 重新卸了再调试比较好。
3.黑屏
Q:跳转到另外一个 Activity 时长时间黑屏,没报任何错误.
A:有很大的可能是主线程中发生了死循环,检查下自己写的循环代码,覆写的方法返回值有没有错误。
4.图片加载
Q:用 fresco 加载闪屏失败
A:这个问题出现在经过混淆后的app 中,当时闪屏默认加载的是 drawable 下的一张图片,混淆过后可能fresco找不到该目录下的图片,后来改到 assets 目录下就可以正常显示。picasso 可以正常加载,不过加载大图方面还是 fresco 性能比较好,占用内存相比 picasso 也少很多。
5.launchMode
Q:当app 还在后台运行,返回桌面点击 app 图标时再次闪屏的问题
A:把闪屏的launchMode设置为standard,app的MainActivity的 launchMode设置为 singleTask.当有多次点击按钮会产生两个Activity实例时可以吧laucnhMode设置为singleTask.