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