前言
本類文章是我在學(xué)習(xí)過(guò)程中所遇到已經(jīng)解決過(guò)的問(wèn)題(Q.Q),把這些自己已經(jīng)解決過(guò)問(wèn)題發(fā)出來(lái),如果有新手遇到和我類似的問(wèn)題以便能快速解決挪捕,節(jié)省自己的時(shí)間谒府。因?yàn)楸救诉€是菜鳥拼坎,如有錯(cuò)誤希望指正浮毯。
Android 中 Selector 的用法
Selector 用法例子說(shuō)明
在做項(xiàng)目的過(guò)程中有遇到過(guò)這樣一個(gè)問(wèn)題:在點(diǎn)擊一個(gè) TextView 或者 Button 之類的控件時(shí),需要給出點(diǎn)擊的效果泰鸡。比如在一個(gè) Textview 在點(diǎn)擊前文本文字是白色的债蓝,在手指按下時(shí)顏色發(fā)生改變(比如顏色變淺),之后當(dāng)手指松開(kāi)時(shí)文本的顏色恢復(fù)原來(lái)的顏色盛龄,這里的效果圖用的是亮色(藍(lán)色和綠色)想用其他顏色直接替換即可饰迹,效果圖如下:
首先是手指沒(méi)有點(diǎn)下去的時(shí)候:
之后便是手指點(diǎn)下去的時(shí)候:
最后就是手指離開(kāi)屏幕:
也上的效果能夠給客戶比較好的點(diǎn)擊反饋,提高體驗(yàn)余舶。
如何使用 Selector
以 selector_text_color.xml 為例
首先在 res 目錄下新建 drawable 文件夾啊鸭,再在新建的 drawable 文件夾中新建selector_text_color.xml ,其目錄結(jié)構(gòu)為:res/drawable/selector_text_color.xml 欧芽。
這樣就把 selector 給建立好了莉掂,后面要根據(jù)具體的需求要編寫里面的內(nèi)容。
Selector 常用的屬性
android:state_pressed 如果是 true千扔,當(dāng)被點(diǎn)擊時(shí)顯示該圖片憎妙,如果是 false 沒(méi)被按下時(shí)顯示默認(rèn)。
android:state_focused 如果是 true曲楚,獲得焦點(diǎn)時(shí)顯示厘唾;如果是 false 沒(méi)獲得焦點(diǎn)顯示默認(rèn)×埽
android:state_selected 如果是 true抚垃,當(dāng)被選擇時(shí)顯示該圖片;是 false 未被選擇時(shí)顯示該圖片趟大『资鳎
android:state_checkable 如果值為 true,當(dāng) CheckBox 能使用時(shí)顯示該圖片逊朽;false罕伯,當(dāng) CheckBox 不能使用時(shí)顯示該片∵椿洌
android:state_checked 如果值為 true追他,當(dāng) CheckBox 選中時(shí)顯示該圖片;false岛蚤,當(dāng) CheckBox 為選中時(shí)顯示該圖片邑狸。
android:state_enabled 如果值為 true涤妒,當(dāng)該組件能使用時(shí)顯示該圖片单雾;false,當(dāng)該組件不能使用時(shí)顯示該圖片。
android:state_window_focused 如果值為 true硅堆,當(dāng)此 activity 獲得焦點(diǎn)在最前面時(shí)顯示該圖片蜂奸; false,當(dāng)沒(méi)在最前面時(shí)顯示該圖片硬萍。
Selector 用法的實(shí)例
首先在 res/values/colors.xml 下把顏色的代碼寫進(jìn)去(引用代碼而不是直接寫入顏色的代碼扩所,要不然會(huì)報(bào)錯(cuò)) 代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="textBlue">#2196F3</color>
<color name="textGreen">#86cd3e</color>
</resources>
上面三個(gè)是系統(tǒng)自帶的,下面三個(gè)是我自己寫入的朴乖。 之后便是在 drawable 中創(chuàng)建 XML 文件了祖屏,因?yàn)檫@里只是演示,主要還是根據(jù)個(gè)人的需求來(lái)寫买羞,這里是當(dāng)被點(diǎn)擊時(shí)顯示該文字顏色發(fā)生改變袁勺。創(chuàng)建好的文件代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false" android:color="@color/textBlue"/>
<item android:state_pressed="true" android:color="@color/textGreen"/>
</selector>
之后便是在布局文件中寫入設(shè)置好的屬性,如果是用的是 TextView 只要在 Texview 屬性里面把 android:textColor="XXXXXXX" 里面的改成你原先寫好 drawable 下文件的名字就好畜普,如果是 Button 則修改android:background="XXXXXX" 期丰,這里用的是Textview 則屬性應(yīng)該為 android:textColor="@drawable/selector_text_color"。下面貼上布局文件的代碼(這個(gè)比較簡(jiǎn)單吃挑,實(shí)際還是根據(jù)個(gè)人需求來(lái)做)钝荡。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是可以變色的噢"
android:layout_centerInParent="true"
android:textColor="@drawable/selector_text_color"/>
</RelativeLayout>
最后只要在 Activity 中初始化 Textview 和添加點(diǎn)擊事件就行了,代碼如下:
package com.example.xiaozhang.myapplication;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView mTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.text);
mTextView.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View view) {
}
});
}
}
總結(jié)
利用這種方法就可以給客戶提供良好的體驗(yàn)效果舶衬,讓客戶知道了已經(jīng)點(diǎn)擊了該按鈕埠通,也不需要在代碼中設(shè)置多次點(diǎn)擊切換的圖片,減少代碼量逛犹,也減少美工妹子的制作圖片的工作端辱。菜鳥寫作,如有錯(cuò)誤望指正虽画。