很奇怪,我在給EditText設(shè)置setOnFocusChangeListener()監(jiān)聽薪棒,但是始終未能成功手蝎,焦點(diǎn)一直存在榕莺,不知其原因留储,款筑,代碼如下:
1 et_password.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
InputMethodManager imm = (InputMethodManager) getActivity()
.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(et_username.getWindowToken(), 0);
}
}
});
后來各種百度忠寻,最后給activity(fragment)設(shè)置了setOnTouchListener(this)監(jiān)聽排嫌,達(dá)到了預(yù)期的效果,代碼如下:
@Override
public boolean onTouch(View v, MotionEvent event) {
InputMethodManager imm = (InputMethodManager) getActivity() .getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(et_username.getWindowToken(), 0); imm.hideSoftInputFromWindow(et_password.getWindowToken(), 0); return true; }
這里要解釋下返回值true:
到 Android Developers 上查看了一下這個(gè)接口和這個(gè)方法千扶,文檔中對(duì)該方法的返回值描述如下:True if the listener has consumed the event, false otherwise勉抓。大概意思就是說骇吭,如果返回true吨述,則表示監(jiān)聽器消耗了該事件(我的理解就是不用繼續(xù)向上傳遞該事件了岩睁,該事件的傳遞到此為止);否則返回false揣云。首先觸發(fā)到的監(jiān)聽是最底層最直接給它設(shè)置的監(jiān)聽捕儒,如果是false,并且它的父控件如果也注冊(cè)次監(jiān)聽,那么它的父控件也會(huì)監(jiān)聽也會(huì)被觸發(fā) 邓夕;如果是true,則不會(huì)觸發(fā)父控件的監(jiān)聽刘莹。