如何優化佈局代碼?使之看起來既簡潔又得到優化呢?
在項目中寫佈局的時候常常會遇到很多空間使用到了很多相同的屬性,例如一個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優化代碼哦!