android 键盘设置详解
相信大家在初涉android鍵盤的時(shí)候都有過困惑,無論是在manifest中設(shè)置android:windowSoftInputMode,還是通過mDialog.getWindow().setSoftInputMode();設(shè)置,都有那么多類型,該怎么選;他們都有什么樣的特性呢?
下面就對(duì)這些類型以activity做出說明(我們分頁面view是否被嵌套在scrollview中,分別給出特性):
- adjustResize
activity會(huì)在鍵盤有變動(dòng)的時(shí)候重新計(jì)算布局,調(diào)用activity的onSizeChanged方法。在進(jìn)入該activity時(shí),鍵盤會(huì)自動(dòng)彈起。
在包裹著ScrollView的時(shí)候,能夠保證焦點(diǎn)露出;同時(shí)將ScrollView的最低邊緣重新計(jì)算至鍵盤上邊緣位置;而里面的view可以正常上下滑動(dòng),能夠完全展示。
在不包裹的時(shí)候,則不能夠保證焦點(diǎn)正常露出;如果EditText過于偏下,則可能會(huì)被胡亂地推上來,而布局上邊緣不發(fā)生變化,因此不一定能看到編輯區(qū)。
- adjustPan
activity不會(huì)在鍵盤變化的時(shí)候重新計(jì)算布局。鍵盤不會(huì)自動(dòng)彈出。
無論是否包裹著ScrollView,都能夠保證焦點(diǎn)正常露出;如果焦點(diǎn)偏下,會(huì)被正常推上來,但上部會(huì)被推出window上邊界,且均不能上下滑動(dòng)。
- adjustNothing
鍵盤不會(huì)自動(dòng)彈出;彈出的鍵盤會(huì)直接覆蓋activity,不管焦點(diǎn)是否能被看到。
- adjustUnspecified
鍵盤不會(huì)自動(dòng)推上來;能夠保證焦點(diǎn)正常露出;
在包裹著ScrollView時(shí),可上下滑動(dòng);否則不能滑動(dòng);
- stateAlwaysVisible
always 強(qiáng)調(diào)了回來的動(dòng)作:即從Activity A到B,再回到A的時(shí)候的鍵盤狀態(tài)。
該狀態(tài)下,從B回到A時(shí)的鍵盤狀態(tài)一定是彈起狀態(tài),無論A到B的時(shí)候A的鍵盤是什么狀態(tài)。
(只關(guān)心返回狀態(tài))
- stateAlwaysHidden
跟stateAlwaysVisible相反,從B到A的鍵盤狀態(tài)一定是關(guān)閉的,無論A到B的時(shí)候A的鍵盤是什么狀態(tài)(只關(guān)心返回狀態(tài))
- stateVisible
在進(jìn)入Activity的時(shí)候,鍵盤自動(dòng)彈出,返回時(shí)保持鍵盤當(dāng)前狀態(tài)不變(只關(guān)心進(jìn)入狀態(tài))
- stateHidden
在進(jìn)入Activity的時(shí)候,鍵盤自動(dòng)收起,返回時(shí)包吃鍵盤當(dāng)前狀態(tài)不變(只關(guān)心進(jìn)入狀態(tài))
- stateUnchanged
在進(jìn)入Activity的時(shí)候,鍵盤狀態(tài)保持當(dāng)前狀態(tài)不變
- stateUnspecified
未知,還沒有弄清楚,在目的明確的情況下,不建議使用。
以上介紹的特性,都是在單獨(dú)使用某一狀態(tài)的時(shí)候所展現(xiàn)出來的。但是,我們注意到,上述類型可分為兩類,即以adjustXXX開頭的和以stateXXX開頭的。
這兩類標(biāo)志其實(shí)是兩個(gè)維度的設(shè)置,一個(gè)從布局維度,另一個(gè)從狀態(tài)維度。因此往往可以進(jìn)行組合使用;具體情況應(yīng)根據(jù)設(shè)計(jì)要求來。
下面介紹鍵盤顯示還是隱藏的顯示地控制方法。
一般我們?cè)赼ctivity中會(huì)這樣使用
但是令人困惑的是,Flags有真么多,每一種都是什么含義呢?該怎么使用呢?下面就一一介紹每一種Flag的使用方法和含義。
HIDE_IMPLICIT_ONLY
表示鍵盤除了在用戶顯示地調(diào)用,其余情況都應(yīng)該是隱藏的。用于hideSoftInputFromWindow(IBinder, int)方法.
HIDE_NOT_ALWAYS
表示鍵盤除了開始的時(shí)候被使用SHOW_FORCED 調(diào)用,正常情況下都應(yīng)該是隱藏的。用于hideSoftInputFromWindow(IBinder, int)方法
RESULT_HIDDEN
用于 showSoftInput(View, int, ResultReceiver) 和 hideSoftInputFromWindow(IBinder, int, ResultReceiver),即,有廣播接收器的方法。
廣播接收到RESULT_HIDDEN,意味著鍵盤從顯示到隱藏RESULT_SHOWN
廣播接收器收到,意味著鍵盤從隱藏到展示
RESULT_UNCHANGED_HIDDEN
廣播接收器收到,意味著鍵盤狀態(tài)沒變,且為隱藏
RESULT_UNCHANGED_SHOWN
廣播接收器收到,意味著鍵盤狀態(tài)沒變,且為顯示
SHOW_FORCED
表示該鍵盤被人為吊起,用于方法showSoftInput(View view, int flag),應(yīng)該由人為隱藏。
SHOW_IMPLICIT
表示該鍵盤被自動(dòng)吊起,不是被用戶手動(dòng)吊起。用于方法showSoftInput(View view, int flag)
上述狀態(tài),說白了是在鍵盤吊起的時(shí)候?yàn)槠涞跗鸬脑蚣由项悇e的,而這個(gè)類別不會(huì)影響到鍵盤是否彈起,而只會(huì)影響鍵盤是否會(huì)收回。比如,當(dāng)鍵盤以SHOW_FORCE狀態(tài)吊起時(shí),如果設(shè)置了以HIDE_NOT_ALWAYS的收回策略,就不會(huì)被真正收回。因?yàn)?#xff0c;文檔中顯示,使用HIDE_NOT_ALWAYS一般情況下都會(huì)成功隱藏,只有在遇到以SHOW_FORCED吊起的鍵盤時(shí)無效。
因此,在顯示地控制鍵盤吊起和關(guān)閉的時(shí)候,應(yīng)進(jìn)行以下調(diào)用:
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,InputMethodManager.HIDE_NOT_ALWAYS);
當(dāng)鍵盤關(guān)閉的時(shí)候調(diào)用該方法,表明我以SHOW_IMPLICIT的狀態(tài)打開鍵盤,且應(yīng)該以HIDE_NOT_ALWAYS的狀態(tài)關(guān)閉。
當(dāng)鍵盤經(jīng)過上述過程開啟時(shí),再次調(diào)用該方法,表明我要以HIDE_NOT_ALWAYS的方式關(guān)閉該鍵盤,而這個(gè)鍵盤接受這樣的關(guān)閉方式,因此可以正常關(guān)閉。
參考資料 Android手動(dòng)顯示和隱藏軟鍵盤方法總結(jié)
總結(jié)
以上是生活随笔為你收集整理的android 键盘设置详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 魔兽世界服务器文件,【魔兽世界7.35】
- 下一篇: 鞋带打结不散