有時(shí)候我們需要把一個(gè)EditText作為搜索框放在首頁上,但一般而言EditText是默認(rèn)獲取焦點(diǎn)的,所以進(jìn)入首頁后EditText里面就會(huì)顯示焦點(diǎn),并且彈出輸入法,交互非常惡劣。
隱藏輸入法很好解決,但如何讓EditText不默認(rèn)獲取焦點(diǎn)涉及到點(diǎn)擊事件,這里細(xì)細(xì)理一下。
在XML中設(shè)置,讓EditText的父級(jí)容器上默認(rèn)獲取焦點(diǎn),即:
android:focusable="true"
android:focusableInTouchMode="true"
于是,進(jìn)入首頁之后,焦點(diǎn)默認(rèn)在父級(jí)容器上,EditText里面不會(huì)顯示光標(biāo),用戶體驗(yàn)上升。
但是,我們需求當(dāng)點(diǎn)擊父級(jí)容器的時(shí)候,需要啟動(dòng)搜索,即:讓EditText獲得焦點(diǎn),還需要給EditText設(shè)置一些動(dòng)畫。我們可以使用editView.requsetFocus
使EditView獲得焦點(diǎn)。
但現(xiàn)實(shí)是我們需要兩次點(diǎn)擊才會(huì)成功。這是因?yàn)榈谝淮吸c(diǎn)擊,焦點(diǎn)變化,第二次點(diǎn)擊,才是真正觸發(fā)onclick事件。
這里提供另一種方法,給EditText設(shè)置監(jiān)聽事件OnFocusChangeListener。就是將所有啟動(dòng)搜索的事件,包括動(dòng)畫等放在監(jiān)聽事件里面:
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus){
}else{
}
}
通過EditText是否獲得焦點(diǎn),直接來做出一些后續(xù)事件。這樣,當(dāng)?shù)谝淮吸c(diǎn)擊,焦點(diǎn)變化的時(shí)候,后續(xù)的動(dòng)畫反應(yīng)就出來了。取代onClick事件中設(shè)置的方法。