1. 程式人生 > >Android佈局優化之使用style提取重複使用屬性

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優化程式碼哦!