StateListDrawable狀態選擇器

StateListDrawable:
針對佈局的各類狀態進行背景的修改
activity_main.xml:android

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.fitsoft.MainActivity">

    <Button
        android:id="@+id/btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="8dp"
        android:background="@drawable/bg_login"
        android:text="登陸"
        android:textColor="#fff"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

首選在主佈局中建立一個簡單按鈕。而後在drawable文件夾下新建背景佈局app


佈局內容以下:

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

    <item android:state_pressed="false" android:drawable="@drawable/bg_login_default"/>

    <item android:state_pressed="true" android:drawable="@drawable/bg_login_pressed"/>

</selector>

設置兩個狀態的背景,一個是按下時背景,一個是未按下時的背景,這裏用到了上一次的shape的內容,其中 bg_login_default.xml 這個shape內容爲:佈局

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

    <corners android:radius="10dp"/>

    <solid android:color="#1C9246"/>

    <stroke android:width="1dp"
        android:color="@android:color/darker_gray"/>

</shape>

有圓角,有描邊的矩形shape,而另外一個 bg_login_pressed.xml 的內容同樣,只有顏色不一樣,這裏就不放了。
大致思路,將組件背景指定爲selector,在selector中爲其各類狀態設置相應的shape。
效果圖:code

相關文章
相關標籤/搜索