Android布局优化之使用style提取重复使用属性
2016-12-14 00:00
381 查看
如何优化布局代码?使之看起来既简洁又得到优化呢?
在项目中写布局的时候常常会遇到很多空间使用到了很多相同的属性,例如一个TextView使用到了marginLeft和marginRight,其他很多类型的空间也是用到了这两条属性,那么我们就应该提取该属性以style的形式应用到各个控件来优化我们的代码。那开始来使用style优化我们的布局吧
场景1:
在我们的项目中很多空间使用到了marginLeft和marginRight这两个属性,那我们定义了style:style_margin_lr_10
场景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>使用效果如图:
![](https://img-blog.csdn.net/20161214001822030?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvWkdNRl9YMTlB/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
!注意这种通过.链接继承属性的做法只适用于我们自定的属性,而不能用于继承android平台的。
所以项目中很多重复属性的时候记得使用style优化代码哦!
在项目中写布局的时候常常会遇到很多空间使用到了很多相同的属性,例如一个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优化代码哦!
相关文章推荐
- 【Android Training - Connectivity】优化下载的效率[Lesson 3 - 使用缓存来避免重复的下载]
- Android 在Java代码中设置style属性--使用代码创建ProgressBar对象
- Android 性能优化 一 布局优化工具Hierarchy Viewer的使用
- Android 在Java代码中设置style属性--使用代码创建ProgressBar对象
- android UI进阶之布局的优化---使用include和merge
- android UI进阶之布局的优化---使用include和merge
- Android 性能优化 三 布局优化ViewStub标签的使用
- Android 在Java代码中设置style属性--使用代码创建ProgressBar对象
- 如何在android style/layout文件中使用自定义属性。
- Android布局优化几个重要标签的使用include、merge、ViewStub、requestFocus
- TODO:android 属性可以使用多个style么?
- Android中View绘制优化二一---- 使用<include />标签复用布局文件
- Android 性能优化 四 布局优化merge标签的使用
- Android 在Java代码中设置style属性--使用代码创建ProgressBar对象(反射机制)
- Android 在Java代码中设置style属性--使用代码创建ProgressBar对象
- android UI进阶之布局的优化---使用include和merge
- (转)Android中View绘制优化二一---- 使用<include />标签复用布局文件
- 关于android中使用weight属性实现多个layou比例布局的计算方法
- android布局中权重(weight)属性的使用
- Android中使用include标签和merge标签重复使用布局