瞎扯
第二天,继续
接上篇,上篇主要简单聊了下分析布局
今天还是差不多,优化布局.
优化布局:
就说说我知道的一些,欢迎补充
1.减少嵌套
这点上篇就讲过了,
再提是因为这个的重要性吧,
安卓的嵌套大致两种.
-
列表嵌套
这种呢.首先要相信一点.同向的情况下,90%的列表设计都是可以一个RecyclerView搞定的.
如果非要嵌套呢.那么嵌套RecyclerView
的adapter
,一定要注意缓存,不要每次
onBindViewHolder的时候都去重新创建一次,纵向套横向其实算不上嵌套.
当然,还有事件冲突,所以,不到万不得已,不要去嵌套,该怼的设计就得怼.
-
容器嵌套.
还是上篇提到的,
LinearLayout,RelativeLayout
等等疯狂嵌套.
然后页面渲染卡的一笔,然后被人吐槽,安卓卡死.好在现在出了约束布局
CoordinatorLayout
,虽然我也不大用,因为用不上.不过是优化布局的神器.
性能上比RelativeLayout
更好.还能做一些RelativeLayout
不好做的事.
最重要的是它对屏幕的适配性.
2 .背景
对,就是背景.
我见过很多,现在还喜欢用.9图做背景.真的是不推荐
优化的地方:
(1).不要重复设置背景:
这是常常会被忽略的一件事情.经常会等到做布局优化的时候才会去改.
比如一个列表页面:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="#fff"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_content"
android:background="#ccc"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<TextView
android:id="@+id/tv_next"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_alignParentBottom="true"
android:background="#ff7000"
android:gravity="center"
android:text="确定选择"
android:textColor="#fff"
android:textSize="16dp"/>
</RelativeLayout>
然后列表条目的布局:
<TextView
android:id="@+id/tv_name"
android:layout_width="match_parent"
android:layout_height="44dp"
android:background="#fff"
android:gravity="center_vertical"
android:text="name" />
这种写法我是见过的..
然后打开查看过度绘制,整个页面都是红的.
这里一共重复了4次背景.
- 第一层,window背景
- 第二层.RelativeLayout背景
- 第三层.ReyclerView背景
- 第四层.TextView背景
实际上.除了TextView,其他的背景都可以去掉.
去掉window背景
<item name="android:windowBackground">@android:color/transparent</item>
(2).尽量不要用图片做控件背景.
除了启动页.和部分标签性的背景,还有什么地方是值得用图片做背景的
如果只是为了一个边线,
这些,只是一个shape就解决了.
我基本很少找UI切背景.只有icon会找UI, .9已经1年多没用过了吧.
如果允许,最好使用svg
来作为icon和背景.
一.节省app大小,
二.不会失真.如果是图片做背景.失真是很的难看.
三.节省内存.图片可是很占内存的.
总结就是能用shape的或者canvas画的,绝不用图片,搞不定也最好用svg来搞.
(3)ViewStub merge
这两个东西,优化上来说,是很常用的
ViewStub
相当于一个占位符.必须调用了inflate 和setvisible,设置想要的渲染的布局layoutId.才会被渲染.合理运用.可以优化页面启动速度.-
merge
这个必须用在xml文件的根级,.
image.png
不然是用不了的.这个能减少一层容器布局.不过RecyclerView的item布局不能用这个.
交流群:493180098,这是个很少吹水,交流学习的群.