一花履、常用修改Button顏色并設(shè)置點(diǎn)擊效果方法
Android中Button的默認(rèn)顏色為灰色屎篱,并且?guī)в心J(rèn)的點(diǎn)擊效果,在5.0以上的系統(tǒng)還有漣漪的效果榜跌。通常在開發(fā)時(shí)我們都會(huì)
修改Button的顏色损搬,最常用的方式就是修改Button的背景顏色碧库,即“android:background”;只是修改簡(jiǎn)單的修改背景顏色的話Button就沒有點(diǎn)擊效果巧勤,這時(shí)我們一般會(huì)使用selector來實(shí)現(xiàn)點(diǎn)擊效果嵌灰;這樣處理不僅會(huì)增加工作量,也會(huì)丟失掉5.0以上系統(tǒng)的漣漪效果颅悉。
二沽瞭、使用Style修改Button顏色并保持默認(rèn)點(diǎn)擊效果
Android中我們也可以通過Style來設(shè)置Button的樣式
1. Style中Button樣式的設(shè)置
首先我們需要查看默認(rèn)的Button樣式是如何設(shè)置的,在.../res/styles.xml文件中我們可以看到應(yīng)用默認(rèn)的style
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
按住command鍵點(diǎn)擊“Theme.AppCompat.Light.DarkActionBar”剩瓶,或者選中按“command+B”快捷鍵繼續(xù)跟蹤查看
<style name="Theme.AppCompat.Light.DarkActionBar" parent="Base.Theme.AppCompat.Light.DarkActionBar"/>
繼續(xù)跟蹤查看“Base.Theme.AppCompat.Light.DarkActionBar”
<style name="Base.Theme.AppCompat.Light.DarkActionBar" parent="Base.Theme.AppCompat.Light">
<item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>
<item name="actionBarWidgetTheme">@null</item>
<item name="actionBarTheme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
<!-- Panel attributes -->
<item name="listChoiceBackgroundIndicator">@drawable/abc_list_selector_holo_dark</item>
<item name="colorPrimaryDark">@color/primary_dark_material_dark</item>
<item name="colorPrimary">@color/primary_material_dark</item>
</style>
繼續(xù)跟蹤查看“Base.Theme.AppCompat.Light”時(shí)會(huì)提示有不同版本驹溃,通過一個(gè)個(gè)跟蹤查看可以知道城丧,最終繼承的parent style都是“Base.V7.Theme.AppCompat.Light”,在“Base.V7.Theme.AppCompat.Light”可以找到對(duì)Button樣式的定義
<style name="Base.V7.Theme.AppCompat.Light" parent="Platform.AppCompat.Light">
...
<!-- Button styles -->
<item name="buttonStyle">@style/Widget.AppCompat.Button</item>
<item name="buttonStyleSmall">@style/Widget.AppCompat.Button.Small</item>
<item name="android:textAppearanceButton">@style/TextAppearance.AppCompat.Widget.Button</item>
...
</style>
其中有設(shè)置了buttonStyle豌鹤,繼續(xù)跟蹤查看“Widget.AppCompat.Button”
<style name="Widget.AppCompat.Button" parent="Base.Widget.AppCompat.Button"/>
繼續(xù)跟蹤查看“Base.Widget.AppCompat.Button”時(shí)會(huì)提示有不同版本亡哄,如圖:
“Base.Widget.AppCompat.Button”不同版本有不同的實(shí)現(xiàn)
- V21之前
<style name="Base.Widget.AppCompat.Button" parent="android:Widget">
<item name="android:background">@drawable/abc_btn_default_mtrl_shape</item>
<item name="android:textAppearance">?android:attr/textAppearanceButton</item>
<item name="android:minHeight">48dip</item>
<item name="android:minWidth">88dip</item>
<item name="android:focusable">true</item>
<item name="android:clickable">true</item>
<item name="android:gravity">center_vertical|center_horizontal</item>
</style>
- V21及V21之后
<style name="Base.Widget.AppCompat.Button" parent="android:Widget.Material.Button"/>
...
<style name="Widget.Material.Button">
<item name="background">@drawable/btn_default_material</item>
<item name="textAppearance">?attr/textAppearanceButton</item>
<item name="minHeight">48dip</item>
<item name="minWidth">88dip</item>
<item name="stateListAnimator">@anim/button_state_list_anim_material</item>
<item name="focusable">true</item>
<item name="clickable">true</item>
<item name="gravity">center_vertical|center_horizontal</item>
</style>
可以看到針對(duì)不同版本分別設(shè)置了Button的樣式。
2. btttonStyle中顏色的設(shè)置
通過分析Style傍药,可以知道可以通過buttonStyle來指定Button的樣式
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<!-- 設(shè)置button的Style -->
<item name="buttonStyle">@style/Xxx</item>
</style>
在V7支持包中磺平,提供了5個(gè)預(yù)置的Button的Style,如下:
<style name="Widget.AppCompat.Button" parent="Base.Widget.AppCompat.Button"/>
<style name="Widget.AppCompat.Button.Colored" parent="Base.Widget.AppCompat.Button.Colored"/>
<style name="Widget.AppCompat.Button.Borderless" parent="Base.Widget.AppCompat.Button.Borderless"/>
<style name="Widget.AppCompat.Button.Borderless.Colored" parent="Base.Widget.AppCompat.Button.Borderless.Colored"/>
<style name="Widget.AppCompat.Button.Small" parent="Base.Widget.AppCompat.Button.Small"/>
Style | 背景顏色屬性 | 文字顏色屬性 | 效果 |
---|---|---|---|
.Button(默認(rèn)) | colorButtonNormal | textColor (默認(rèn)黑色) |
|
.Button.Colored | colorAccent | textColor (默認(rèn)白色) |
|
.Button.Borderless | 透明 | textColor (默認(rèn)黑色) |
|
.Button.Borderless.Colored | 透明 | textColor (默認(rèn)colorAccent) |
|
.Button.Small | colorButtonNormal | textColor (默認(rèn)黑色) |
3. 通過buttonStyle修改Button顏色
3.1 全局Button設(shè)置
直接在應(yīng)用主題中設(shè)置buttonStyle拐辽,然后通過相應(yīng)的屬性修改Button的背景色或文字顏色
如下:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="buttonStyle">@style/Widget.AppCompat.Button</item>
<item name="colorButtonNormal">@color/colorBlue</item>
</style>
3.2 單個(gè)Button設(shè)置
在styles.xml文件中新建Style,繼承應(yīng)用Style擦酌,在其中設(shè)置buttonStyle俱诸,并通過相應(yīng)的屬性修改Button的背景色或文字顏色
然后在需要修改的Button中添加android:theme屬性,引用新建的Style即可
<style name="RedButton" parent="AppTheme">
<item name="buttonStyle">@style/Widget.AppCompat.Button</item>
<item name="colorButtonNormal">@color/colorRed</item>
</style>
在layout中使用
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button_1"
android:theme="@style/RedButton" />
<!-- 注意是android:theme屬性赊舶,不是style屬性 -->
三睁搭、修改Button圓角大小
目前只找到了全局修改Button圓角大小的方法
在dimes.xml文件中復(fù)寫abc_control_corner_material的值,可以修改應(yīng)用內(nèi)所有Button的圓角大小
<dimen name="abc_control_corner_material" tools:override="true">8dp</dimen>