Android中EditText+Button組合導(dǎo)致輸入板無法收起的原因分析及解決辦法
在Android開發(fā)中,錄入信息是最基本的操作,使用非常廣泛。
但是Android對輸入法彈出/收起的支持,并不是很好。
對彈出,提供了force方式和implicit方式,對輸入?yún)s沒有提供force方式。
可想而知,想彈能彈,想收不能收,這是多么的痛苦!
沒有對輸入法做任何處理的情況下,EditText輸入后,點擊Button一般會自動收起輸入法。
若沒有收起,那可能是布局上有一些問題,可以嘗試在最外層添加scrollView。
筆者親測在大部分情況下,嵌套scrollView是可行的。
如果上述方法仍然不能解決問題,又對輸入板的自動收起很執(zhí)著(很不幸,PM一般都這么執(zhí)著),可以考慮下面這種方式
對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在獲取焦點時彈出輸入法,失去焦點時能夠關(guān)閉輸入法。
對Button的修改
在onClick方法中調(diào)用如下方法,并在調(diào)用后進行業(yè)務(wù)處理
public static void obtainFocus(View v) {
v.setFocusableInTouchMode(true);
v.requestFocus();
v.setFocusableInTouchMode(false);
}
通過上述兩端代碼,點擊Button之后輸入板能夠正常收起。
但是進入頁面讓輸入板彈出,這個就需要單獨處理了。
原理
EditText部分
通過監(jiān)聽焦點變化,進行輸入板的展示和隱藏。
焦點變化通過View.onFucusChange方法監(jiān)聽即可。
Button部分
當(dāng)點擊Button之后,首先獲取焦點,之后再進行業(yè)務(wù)處理。
點擊事件通過View.onClickListener注冊即可。
大家可能對setFocusableInTouchMode調(diào)用兩次有疑問,其實調(diào)用兩次是為了能夠進行多次requestFocus方法(requestFocus方法需要focusableInTouchMode為true)。
在FocusableInTouchMode為true的情況下,首次點擊Button會讓Button獲得焦點,再次點擊才能回調(diào)onClick。
為了保證每次點擊均能回調(diào)onClick,我們首先設(shè)置focusableInTouchMode 為true,這樣便能夠調(diào)用requestFocus進行焦點獲取,隨后設(shè)置focusableInTouchMode為false,保證下次點擊時仍然能正常相應(yīng)onClick。
相關(guān)文章
XListView實現(xiàn)下拉刷新和上拉加載原理解析
這篇文章主要為大家解析了XListView實現(xiàn)下拉刷新和上拉加載原理,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12
Android中Notification用法實例總結(jié)
這篇文章主要介紹了Android中Notification用法,以實例形式較為詳細(xì)的分析并總結(jié)了Notification的功能與使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10
設(shè)置Android系統(tǒng)永不鎖屏永不休眠的方法
在進行Android系統(tǒng)開發(fā)的時候,有些特定的情況需要設(shè)置系統(tǒng)永不鎖屏,永不休眠。本篇文章給大家介紹Android 永不鎖屏,開機不鎖屏,刪除設(shè)置中休眠時間選項,需要的朋友一起學(xué)習(xí)吧2016-03-03
Android基于ViewPager+Fragment實現(xiàn)左右滑屏效果的方法
這篇文章主要介紹了Android基于ViewPager+Fragment實現(xiàn)左右滑屏效果的方法,結(jié)合實例形式分析了Android實現(xiàn)滑屏效果的布局與滑動功能相關(guān)操作技巧,需要的朋友可以參考下2017-07-07
Android Studio實現(xiàn)簡易計算器(表格布局TableLayout)
這篇文章主要為大家詳細(xì)介紹了Android Studio實現(xiàn)簡易計算器,表格布局TableLayout,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-03-03
Android開發(fā)Jetpack?Compose元素Modifier特性詳解
這篇文章主要為大家介紹了Android開發(fā)Jetpack?Compose元素Modifier特性詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10

