android中用style簡化布局文件
android開發相對于ios有一個很大的優勢,那就是可以通過xml來寫布局,而且布局可以很靈活,能適應多種屏幕。但是時間久點你會發現xml中有太多的重復代碼了,我真是恨死了在每次增加一個控件的時候都要不情愿的寫上
android:layout_width="wrap_content" android:layout_height="wrap_content"
這兩行, 如果我們有5個button控件都是16dip白色字體、背景為#0033FF、內容居中,那么我們必須在每個button上都加上這樣幾個屬性:
android:textColor="#FFFFFF" android:textSize="16dip" android:background="#0033FF" android:gravity="center"
是不是很煩,是不是很sb!
其實我們可以用將這些重復的屬性的定義寫在style文件中,如果某個控件需要16dip白色字體、背景為#0033FF的樣式,只需將包含這些屬性定義的style引用進來就可以了。
先看看用style怎么設置這些重復的屬性:
在values下新建style.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="white_blue_button" > <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> <item name="android:textSize">16dip</item> <item name="android:textColor">#FFFFFF</item> <item name="android:gravity">center</item> <item name="android:background">#0033FF</item> </style> </resources>
再回到我們的布局文件在按鈕中設置style="@style/white_blue_button
"就可以了。
<Button style="@style/white_blue_button" android:text="白色字體的藍色按鈕" />
上面的style.xml文件中我們只定義了一組名為white_blue_button
的樣式給白色字體的藍色按鈕
使用,其實在style中還可以定義多個樣式給不同的組件使用。下面的style文件中我們定義了一組樣式給button,還定義了一組樣式給ImageView:
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="homebtn" > <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> <item name="android:textSize">20sp</item> <item name="android:textColor">#FFFFffff</item> <item name="android:gravity">center</item> <item name="android:layout_marginTop">15dip</item> <item name="android:layout_centerHorizontal">true</item> <item name="android:background">@drawable/selector</item> </style> <style name="homeiv"> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> <item name="android:layout_marginTop">15dip</item> <item name="android:layout_centerHorizontal">true</item> </style> </resources>
這就是多個樣式的例子,只需為不同的樣式加上name就可以了。
上面的例子中我們發現"homebtn"
完全繼承了"homeiv"中的屬性,因此還可以進一步簡化:
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="homeiv"> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> <item name="android:layout_marginTop">15dip</item> <item name="android:layout_centerHorizontal">true</item> <item name="android:background">@drawable/home</item> </style> <style name="homebtn" parent="@style/homeiv"> <item name="android:textSize">20sp</item> <item name="android:textColor">#FFFFffff</item> <item name="android:gravity">center</item> <item name="android:background">@drawable/selector</item> </style> </resources>
在homebtn中使用
parent=
"@style/homeiv"
來繼承"
homeiv"
。
當然style最主要的作用不是用來精簡代碼,而是讓開發者自定義更個性的效果,不過這個附加的作用也不錯。拿button來說,一般我們會定義好幾種風格的button,比如文章開頭展示的那幾種,最規范的辦法是將這些風格的button在style中先定義好,然后應用到界面中去。