国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

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

2020-04-11 10:56:18
字體:
來源:轉載
供稿:網友

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

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

對彈出,提供了force方式和implicit方式,對輸入卻沒有提供force方式。

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

沒有對輸入法做任何處理的情況下,EditText輸入后,點擊Button一般會自動收起輸入法。

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

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

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

對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在獲取焦點時彈出輸入法,失去焦點時能夠關閉輸入法。

對Button的修改

在onClick方法中調用如下方法,并在調用后進行業務處理

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

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

但是進入頁面讓輸入板彈出,這個就需要單獨處理了。

原理

EditText部分

通過監聽焦點變化,進行輸入板的展示和隱藏。

焦點變化通過View.onFucusChange方法監聽即可。

Button部分

當點擊Button之后,首先獲取焦點,之后再進行業務處理。

點擊事件通過View.onClickListener注冊即可。

大家可能對setFocusableInTouchMode調用兩次有疑問,其實調用兩次是為了能夠進行多次requestFocus方法(requestFocus方法需要focusableInTouchMode為true)。

在FocusableInTouchMode為true的情況下,首次點擊Button會讓Button獲得焦點,再次點擊才能回調onClick。

為了保證每次點擊均能回調onClick,我們首先設置focusableInTouchMode 為true,這樣便能夠調用requestFocus進行焦點獲取,隨后設置focusableInTouchMode為false,保證下次點擊時仍然能正常相應onClick。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 卢氏县| 贵阳市| 峡江县| 阿瓦提县| 专栏| 叶城县| 景宁| 新平| 大竹县| 桐乡市| 治县。| 图片| 九寨沟县| 黄陵县| 健康| 巴里| 平湖市| 宜兰县| 满洲里市| 墨玉县| 榆社县| 炎陵县| 鄂托克前旗| 阿克陶县| 内江市| 栖霞市| 都安| 海兴县| 兴山县| 安龙县| 东至县| 青铜峡市| 邳州市| 铜梁县| 乐亭县| 吉水县| 汉源县| 庄浪县| 观塘区| 林西县| 内江市|