在Android中,StateListDrawable是一種可以根據(jù)控件狀態(tài)(例如按下、獲取焦點等)自動切換圖片的Drawable
首先,在res/drawable
目錄下為每個狀態(tài)創(chuàng)建一個圖片文件。例如,我們創(chuàng)建三個不同的圖片:button_normal.png
(正常狀態(tài)),button_pressed.png
(按下狀態(tài))和button_focused.png
(獲取焦點狀態(tài))。
接下來,在res/drawable
目錄下創(chuàng)建一個XML文件,例如button_state_list.xml
。在這個文件中,定義一個selector
元素,并為每個狀態(tài)指定相應(yīng)的圖片。例如:
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/button_pressed" android:state_pressed="true" />
<item android:drawable="@drawable/button_focused" android:state_focused="true" />
<item android:drawable="@drawable/button_normal" />
</selector>
這里,我們?yōu)榘聪聽顟B(tài)指定了button_pressed.png
圖片,為獲取焦點狀態(tài)指定了button_focused.png
圖片,而正常狀態(tài)則使用button_normal.png
圖片。
android:background
屬性設(shè)置為剛才創(chuàng)建的button_state_list.xml
: android:id="@+id/my_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Click me!"
android:background="@drawable/button_state_list" />
現(xiàn)在,當(dāng)用戶與這個按鈕交互時,它會根據(jù)不同的狀態(tài)顯示相應(yīng)的圖片。
如果你想在代碼中創(chuàng)建和使用StateListDrawable,可以使用以下方法:
StateListDrawable stateListDrawable = new StateListDrawable();
stateListDrawable.addState(new int[]{android.R.attr.state_pressed}, getResources().getDrawable(R.drawable.button_pressed));
stateListDrawable.addState(new int[]{android.R.attr.state_focused}, getResources().getDrawable(R.drawable.button_focused));
stateListDrawable.addState(new int[]{}, getResources().getDrawable(R.drawable.button_normal));
Button myButton = findViewById(R.id.my_button);
myButton.setBackground(stateListDrawable);
這段代碼首先創(chuàng)建了一個StateListDrawable對象,然后為每個狀態(tài)添加了相應(yīng)的圖片。最后,將StateListDrawable設(shè)置為按鈕的背景。