遇到的问题
面试的时候,面试官总问我做过性能优化吗?我这种低级程序员当然会说一些基本的防止给自己的挖坑,例如布局优化啊,减少覆盖渲染呀啥的,我经常说不要包裹过多的布局,因为在xml生成view对象的也是需要解析xml解析效率降低,渲染view的层级过多都会导致性能降低,都是屁话,总之就是降低xml布局的层级关系,怎么降低呢?今天我学习了下ConstraintLayout,发现他很强大,他几乎可以包裹一层即可完成复杂的布局
ConstraintLayout属性
控制相对于位置
- layout_constraintLeft_toLeftOf
- layout_constraintLeft_toRightOf
- layout_constraintRight_toLeftOf
- layout_constraintRight_toRightOf
- layout_constraintBottom_toTopOf
- layout_constraintTop_toBottomOf
这组属性理解例如layout_constraintLeft_toLeftOf进行拆分constraintLeft代表的是控件的左边,toLeftOf去某控件的左边
画个图,例如我在A控件加入了属性 app:layout_constraintLeft_toLeftOf="id/B"代表让A控件的左边,去B控件的左边
注 意:app:layout_constraintLeft_toLeftOf="parent"参数可以使parent代表父控件
宽高比例约束
- layout_constraintDimensionRatio
在以前的不居中,例如横向填充父容器,高度为横向的一半,在以前的代码需要进行计算,动态设置高度,有了这个约束属性及很简单了
<TextView
android:id="@+id/banner"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#765"
android:gravity="center"
android:text="Banner"
app:layout_constraintDimensionRatio="2:1" //宽高2:1
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" />
均分
在以前均分,我们只需要在LinearLayout设置weight属性即可,使用ConstraintLayout相比较就要麻烦一些
<TextView
android:id="@+id/tab_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="#f00"
android:gravity="center"
android:text="tab1"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintHorizontal_chainStyle="spread_inside"
app:layout_constraintRight_toLeftOf="@+id/tab_2" />
<TextView
android:id="@+id/tab_2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="#0f0"
android:gravity="center"
android:text="tab2"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toRightOf="@id/tab_1"
app:layout_constraintRight_toLeftOf="@+id/tab_3" />
<TextView
android:id="@+id/tab_3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="#00f"
android:gravity="center"
android:text="tab3"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintLeft_toRightOf="@id/tab_2"
app:layout_constraintRight_toRightOf