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

問題描述

style的好處與用法我就不多說了,它可以幫助我們統(tǒng)一定義控件屬性,方便設(shè)置方便修改,具體描述可以參看官方文檔
但是style的編寫與應(yīng)用過程有點麻煩,方法大概可分為兩種:

  1. 先直接在layout中編寫View的屬性,然后在resource新建一個style,將需要的屬性轉(zhuǎn)寫為style的item,然后將style設(shè)置回layout中,最后移除View中被style覆蓋的屬性。
    優(yōu)點:過程符合一般直覺。
    缺點:整個過程繁瑣、機械和重復(fù),而且因為layout與resource語法不同不能直接復(fù)制。
  2. 在resource中直接編寫。
    優(yōu)點:避免了重復(fù)。
    缺點:無法獲得部分上下文提示,無法所見即所得。

解決問題

那我們應(yīng)該如何優(yōu)雅地解決這個問題呢?使用Android Studio的Refactor功能!
首先在Layout中正常編寫View的屬性,然后點擊右鍵打開菜單,依次選擇Refactor -> Extract -> Style


Refactor

然后在彈出的Style提取對話框中,選擇需要的屬性。


Extract Android Style

最后點擊OK,DUANG!style就這樣華麗的生成了,而且同時設(shè)置到了View中并移除了多余屬性。

style

整個過程簡單優(yōu)雅一氣呵成。當我發(fā)現(xiàn)這個功能的時候驚喜與懊惱并存,驚喜IDE帶給我們的便利,懊惱太晚知道所浪費的時間與精力,所以在這里記錄下來讓更多的人知道。

之前的野路子

其實文章到這里就該結(jié)束了,Android Studio提供的重構(gòu)功能已經(jīng)可以完美的解決我們的問題。但其實我是近幾天才剛剛發(fā)現(xiàn)這個功能的,那我之前是如何面對這個問題的呢?我寫了一個簡單的Python腳本來完成這個功能,雖然遠遠比不上重構(gòu)方便,但是在這里還是記錄下自己之前解決問題的過程吧。廢話不多說,上腳本。

#!/usr/bin/python
# coding=utf-8
import 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的屬性自動的轉(zhuǎn)換為resource中style的item的格式。
思路:將view的屬性保存到文件中,逐行讀取后用正則解析屬性名稱與屬性值,并保存到列表,最后使用item的格式輸出到終端。
使用方法:將需要轉(zhuǎn)換的view屬性保存到AndroidSource.txt中,運行腳本,最后從終端復(fù)制轉(zhuǎn)換結(jié)果。
一次典型的運行結(jié)果如下,view的四個屬性已經(jīng)轉(zhuǎn)換為style的格式并輸出到了終端,復(fù)制結(jié)果到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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容