項目地址:https://github.com/SherlockShi/MaterialWidgetPractise
一、前言
你是否還在使用selector來定制Button普通狀態(tài)、按下狀態(tài)的變化呢蜈亩?
你是否也想自己的Button有Material Design的陰影效果呢颓鲜?
你是否也想讓各種控件輕松變換各種顏色風格呢遣蚀?
那么看完這篇分享,你就會有答案了闻蛀。
二宰僧、4種風格的Button
系統默認有4種風格的Button效果材彪,分別是
Widget.AppCompat.Button
Widget.AppCompat.Button.Colored
Widget.AppCompat.Button.Borderless
Widget.AppCompat.Button.Borderless.Colored
效果如下(1-4):
按命名、并結合效果圖可以看出琴儿,這4種風格對應兩個屬性:字體顏色
段化、邊框顏色
(或稱背景顏色);
4種風格可完整描述為默認邊框默認字體
、彩色邊框默認字體
造成、無邊框默認字體
显熏、無邊框彩色字體
,使用方法也很簡單谜疤,只需在普通Button的xml布局文件中佃延,加上style屬性即可:
<Button
...
style="@style/Widget.AppCompat.Button" />
<Button
...
style="@style/Widget.AppCompat.Button.Colored" />
<Button
...
style="@style/Widget.AppCompat.Button.Borderless" />
<Button
...
style="@style/Widget.AppCompat.Button.Borderless.Colored" />
從上圖也可以看到现诀,不加style屬性的話夷磕,默認是使用Widget.AppCompat.Button
風格的。
后面兩種無邊框Button仔沿,只需要改變textColor
屬性來設置效果坐桩,沒什么好說的;主要是前面兩種封锉,其實就是同一種效果:有邊框顏色的Button绵跷,如何定制請看下一節(jié)內容膘螟。
三、各種顏色的Button
你是否還在用selector文件來定制各種顏色碾局、各種不同狀態(tài)下的Button呢荆残?如果一個應用中需要10個不同的Button,你是否需要定義10*4個xml文件呢净当?(normal狀態(tài)+pressed狀態(tài)+disabled狀態(tài)+selector選擇器)
其實使用系統的Button控件就可以輕松實現内斯,只需要配置一定的屬性。
首先像啼,確保主題使用Material風格
主題需要使用Theme.AppCompat
或Theme.Design
類的子主題(建議使用Theme.AppCompat
子類主題俘闯,兼容Android 5.0以下版本),如Theme.AppCompat.Light
忽冻。
其次真朗,在style文件中設置Button顏色
在styles.xml
文件中設置colorButtonNormal
屬性:
values/styles.xml
<style name="RedButton">
<item name="colorButtonNormal">#F44336</item>
</style>
好了,一起來見證奇跡
在布局文件中定義Button僧诚,增加theme屬性(注意遮婶,是theme
,不是style
):
<Button
...
android:theme="@style/RedButton" />
效果如下:
現在湖笨,就可以看到Button變成了你想要的顏色蹭睡,而且點擊后Button顏色也加深了,完全跟使用selector定制出來的一模一樣赶么。并且如果使用Android 5.0以上的手機肩豁,還會默認帶有水紋波
和陰影
的炫酷效果。
四辫呻、其它各種常用控件
其余控件像CheckBox
清钥、RadioButton
,可以用colorControlNormal
放闺、colorControlActivated
(或colorAccent
)來控制正常狀態(tài)和按下狀態(tài)的背景顏色祟昭;
而像Switch
、EditText
等控件怖侦,可以用colorControlActivated
(或colorAccent
)來控制背景顏色篡悟。
五、總結
其實本篇主要只有兩部分內容:
- 4種Button風格:
Widget.AppCompat.Button
Widget.AppCompat.Button.Colored
Widget.AppCompat.Button.Borderless
Widget.AppCompat.Button.Borderless.Colored
- 4個控件屬性
colorButtonNormal: Button正常狀態(tài)顏色
colorControlNormal: 控件正常狀態(tài)顏色
colorControlActivated: 選中或者點擊獲得焦點后的顏色
colorAccent: 選中或者點擊獲得焦點后的顏色
現在匾寝,你是否對本篇開頭的幾個問題有了答案了呢搬葬?
PS:歡迎關注SherlockShi博客