如何优化布局代码?使之看起来既简洁又得到优化呢?
在项目中写布局的时候常常会遇到很多空间使用到了很多相同的属性,例如一个TextView使用到了marginLeft和marginRight,其他很多类型的空间也是用到了这两条属性,那么我们就应该提取该属性以style的形式应用到各个控件来优化我们的代码。那开始来使用style优化我们的布局吧
场景1:
在我们的项目中很多空间使用到了marginLeft和marginRight这两个属性,那我们定义了style:style_margin_lr_10
<style name="style_margin_lr_10">
<item name="android:layout_marginLeft">10dp</item>
<item name="android:layout_marginRight">10dp</item>
</style>
通过该style优化了布局代码,但是,此时发现各个控件属性有不同的需求,比如TextView需要额外的属性textColor,而EditText需要额外的属性inputType,那么我们可以通过扩展style的方式来实现;
场景2:扩展style
扩展style有两种方式:
方式1:继承android平台的属性,通过style标签的parent指定继承自谁
<!--继承android平台属性-->
<style name="red" parent="@android:style/TextAppearance">
<item name="android:textColor">@android:color/holo_red_light</item>
</style>
如上代码,继承了android自带的TextAppearance属性并扩展了textColor属性;
方式2:继承自我们自定义的属性,看官方文档中的一句话(如果您想从自行定义的样式继承属性,则不必使用 parent 属性, 而是只需将您想继承的样式的名称以前缀形式添加到新样式的名称之中,并以句点进行分隔)。
<style name="style_margin_lr_10">
<item name="android:layout_marginLeft">10dp</item>
<item name="android:layout_marginRight">10dp</item>
</style>
当我要扩展margin_lr_10的属性式,只需如下:
<!--如果您想从自行定义的样式继承属性,则不必使用 parent 属性,
而是只需将您想继承的样式的名称以前缀形式添加到新样式的名称之中,并以句点进行分隔-->
<style name="style_margin_lr_10.RED">
<item name="android:textColor">@android:color/holo_red_light</item>
</style>
<style name="style_margin_lr_10.RED.Padding10">
<item name="android:padding">10dp</item>
</style>
通过.链接即可继承属性;
当然也可以通过parent指定要继承的style
<style name="style_margin_lrt_10" parent="style_margin_lr_10">
<item name="android:layout_marginTop">10dp</item>
</style>
使用效果如图:
!注意这种通过.链接继承属性的做法只适用于我们自定的属性,而不能用于继承android平台的。
所以项目中很多重复属性的时候记得使用style优化代码哦!