为了账号安全,请及时绑定邮箱和手机立即绑定

从布局中快速高效地提取Style

标签:
Android

问题描述

style的好处与用法我就不多说了,它可以帮助我们统一定义控件属性,方便设置方便修改,具体描述可以参看官方文档
但是style的编写与应用过程有点麻烦,方法大概可分为两种:

  1. 先直接在layout中编写View的属性,然后在resource新建一个style,将需要的属性转写为style的item,然后将style设置回layout中,最后移除View中被style覆盖的属性。
    优点:过程符合一般直觉。
    缺点:整个过程繁琐、机械和重复,而且因为layout与resource语法不同不能直接复制。

  2. 在resource中直接编写。
    优点:避免了重复。
    缺点:无法获得部分上下文提示,无法所见即所得。

解决问题

那我们应该如何优雅地解决这个问题呢?使用Android Studio的Refactor功能!
首先在Layout中正常编写View的属性,然后点击右键打开菜单,依次选择Refactor -> Extract -> Style


https://img1.sycdn.imooc.com//5d5e06750001a8ee08060615.png

Refactor

然后在弹出的Style提取对话框中,选择需要的属性。


https://img1.sycdn.imooc.com//5d5e06790001ba5306260496.png

Extract Android Style

最后点击OK,DUANG!style就这样华丽的生成了,而且同时设置到了View中并移除了多余属性。

https://img1.sycdn.imooc.com//5d5e067e0001b76008020157.png

style


整个过程简单优雅一气呵成。当我发现这个功能的时候惊喜与懊恼并存,惊喜IDE带给我们的便利,懊恼太晚知道所浪费的时间与精力,所以在这里记录下来让更多的人知道。

之前的野路子

其实文章到这里就该结束了,Android Studio提供的重构功能已经可以完美的解决我们的问题。但其实我是近几天才刚刚发现这个功能的,那我之前是如何面对这个问题的呢?我写了一个简单的Python脚本来完成这个功能,虽然远远比不上重构方便,但是在这里还是记录下自己之前解决问题的过程吧。废话不多说,上脚本。

#!/usr/bin/python# coding=utf-8import re

result = []for line in open("AndroidSource.txt", "r"):
    item = re.search('(\S+)="(.+)"', line)
    result.append((item.group(1), item.group(2)))for i in result:    print '<item name="%s">%s</item>' % i

简单说下脚本的目的与思路。
目的:将layout中view的属性自动的转换为resource中style的item的格式。
思路:将view的属性保存到文件中,逐行读取后用正则解析属性名称与属性值,并保存到列表,最后使用item的格式输出到终端。
使用方法:将需要转换的view属性保存到AndroidSource.txt中,运行脚本,最后从终端复制转换结果。
一次典型的运行结果如下,view的四个属性已经转换为style的格式并输出到了终端,复制结果到resource中即可。

/usr/bin/python /Users/dong/PycharmProjects/AndroidBuildScript/AndroidStyle.py<item name="android:layout_width">match_parent</item><item name="android:layout_height">wrap_content</item><item name="android:layout_marginBottom">@dimen/login_input_margin</item><item name="android:layout_marginTop">@dimen/login_input_margin</item>Process finished with exit code 0



作者:dongorigin
链接:https://www.jianshu.com/p/8c7ae2b653c7

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消