亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android中EditText+Button組合導(dǎo)致輸入板無法收起的原因分析及解決辦法

 更新時(shí)間:2016年01月19日 11:36:28   作者:puff_pig  
這篇文章主要介紹了Android中EditText+Button組合導(dǎo)致輸入板無法收起的原因分析及解決辦法的相關(guān)資料,需要的朋友可以參考下

在Android開發(fā)中,錄入信息是最基本的操作,使用非常廣泛。

但是Android對(duì)輸入法彈出/收起的支持,并不是很好。

對(duì)彈出,提供了force方式和implicit方式,對(duì)輸入?yún)s沒有提供force方式。

可想而知,想彈能彈,想收不能收,這是多么的痛苦!

沒有對(duì)輸入法做任何處理的情況下,EditText輸入后,點(diǎn)擊Button一般會(huì)自動(dòng)收起輸入法。

若沒有收起,那可能是布局上有一些問題,可以嘗試在最外層添加scrollView。

筆者親測(cè)在大部分情況下,嵌套scrollView是可行的。

如果上述方法仍然不能解決問題,又對(duì)輸入板的自動(dòng)收起很執(zhí)著(很不幸,PM一般都這么執(zhí)著),可以考慮下面這種方式

對(duì)EditText的修改

重寫EditText的onFocusChange方法,添加如下代碼

InputMethodManager manager = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (!hasFocus) {
manager.hideSoftInputFromWindow(getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
} else {
manager.showSoftInput(this, );
} 

這段代碼保證了EditText在獲取焦點(diǎn)時(shí)彈出輸入法,失去焦點(diǎn)時(shí)能夠關(guān)閉輸入法。

對(duì)Button的修改

在onClick方法中調(diào)用如下方法,并在調(diào)用后進(jìn)行業(yè)務(wù)處理

public static void obtainFocus(View v) {
v.setFocusableInTouchMode(true);
v.requestFocus();
v.setFocusableInTouchMode(false);
}

通過上述兩端代碼,點(diǎn)擊Button之后輸入板能夠正常收起。

但是進(jìn)入頁面讓輸入板彈出,這個(gè)就需要單獨(dú)處理了。

原理

EditText部分

通過監(jiān)聽焦點(diǎn)變化,進(jìn)行輸入板的展示和隱藏。

焦點(diǎn)變化通過View.onFucusChange方法監(jiān)聽即可。

Button部分

當(dāng)點(diǎn)擊Button之后,首先獲取焦點(diǎn),之后再進(jìn)行業(yè)務(wù)處理。

點(diǎn)擊事件通過View.onClickListener注冊(cè)即可。

大家可能對(duì)setFocusableInTouchMode調(diào)用兩次有疑問,其實(shí)調(diào)用兩次是為了能夠進(jìn)行多次requestFocus方法(requestFocus方法需要focusableInTouchMode為true)。

在FocusableInTouchMode為true的情況下,首次點(diǎn)擊Button會(huì)讓Button獲得焦點(diǎn),再次點(diǎn)擊才能回調(diào)onClick。

為了保證每次點(diǎn)擊均能回調(diào)onClick,我們首先設(shè)置focusableInTouchMode 為true,這樣便能夠調(diào)用requestFocus進(jìn)行焦點(diǎn)獲取,隨后設(shè)置focusableInTouchMode為false,保證下次點(diǎn)擊時(shí)仍然能正常相應(yīng)onClick。

相關(guān)文章

最新評(píng)論