> 在Android日常开发过程中我们经常遇到这样的需求,在点击按钮的时候会变更按钮的样式,包括它的按钮图片和按钮背景以及按钮上文字的颜色变换,下面我来总结一下实现方式。

1.首先先定义我们的按钮

<Button
            android:id="@+id/my_id"
            style="@style/my_style"
            android:minHeight="0dp"
            android:drawableStart="@drawable/drawable_selector"
            android:text="文字"/>

2.定义按钮用到的样式

<style name="my_style">
        <item name="android:layout_width">110dp</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:textAlignment">center</item>
        <item name="android:background">@drawable/background_selector</item>
        <item name="android:textSize">14sp</item>
        <item name="android:textColor">@drawable/font_color_selector</item>
        <item name="android:gravity">center</item>
        <item name="android:paddingLeft">15dp</item>
        <item name="android:paddingTop">8dp</item>
        <item name="android:paddingBottom">8dp</item>
        <item name="android:paddingRight">15dp</item>
    </style>

3.定义我们在样式表中用到的背景selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/bg_normal"  android:state_enabled="false" />
    <item android:drawable="@drawable/bg_select"  android:state_pressed="true" />
    <item android:drawable="@drawable/bg_select"  android:state_selected="true" />
    <item android:drawable="@drawable/bg_normal" />
</selector>

可以看到我们在定义背景的selector的时候一共用到了4中状态来定义,其中包含了默认状态、按钮可用状态、按下状态以及选中状态,其实还有很多状态可以用,这里我们就定义这几种来说明,其他状态可以自己有兴趣去研究一下。

可以看到我们用背景图只使用了两个drawable,bg_normal和bg_select,这两个背景是我们用shape来定义出来的没有使用图片,如果使用图片就更方便了,直接把想要的图片设置到这里就可以了,我下边把两个shape定义的背景来贴出来。

bg_normal.xml定义如下

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="3.0dp" />
    <stroke
        android:width="0.5dp"
        android:color="#BEBEBE" />
    <solid android:color="#ffffff"/>
</shape>

bg_select.xml定义如下

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="3.0dp" />
    <stroke
        android:width="0.5dp"
        android:color="#9fd6fc" />
    <solid android:color="#e0f2ff"/>
</shape>

这样我们定义的背景selector就完成了。

4.定义按钮文字颜色的选择器font_color_selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="#2494ea"/>
    <item android:state_focused="true" android:color="#2494ea"/>
    <item android:state_selected="true" android:color="#2494ea"/>
    <item android:color="#282828"/>
</selector

状态这里就不多做解释了,上边背景定义的时候提到了。

这个背景选择器是放到drawable下,这一点不用迷惑就这样用就行,我已经亲测。

5.最后定义图片按钮的selector

定义drawable_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/icon_pressed" android:state_pressed="true" />
    <item android:drawable="@drawable/icon_select" android:state_selected="true"/>
    <item android:drawable="@drawable/icon_normal" />
</selector>

最后这几个seletor的定义都说完了,其中图片资源我并没有提供,如果有需要可以用自己的图去实验。

0 0 vote
Article Rating
Subscribe
提醒
guest
0 评论
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x