真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

android鍵盤,android鍵盤aosp停止運(yùn)行

【轉(zhuǎn)】Android軟鍵盤的全面解析

軟鍵盤其實(shí)是一個(gè)Dialog

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的新疆網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

InputMethodService為我們的輸入法創(chuàng)建了一個(gè)Dialog,并且對(duì)某些參數(shù)進(jìn)行了設(shè)置,使之能夠在底部或者全屏顯示。當(dāng)我們點(diǎn)擊輸入框時(shí),系統(tǒng)會(huì)對(duì)當(dāng)前的主窗口進(jìn)行調(diào)整,以便留出相應(yīng)的空間來顯示該Dialog在底部,或者全屏。

其實(shí)這段話我們經(jīng)常在各種軟鍵盤博客所看到,但是大家并不知道Android是怎么為我們創(chuàng)建的這個(gè)Dialog,所以我先帶大家來看下軟鍵盤生成這塊的源碼,了解軟鍵盤的生成流程。

我們先來看一下InputMethodService的繼承關(guān)系:

因?yàn)镮nputMethodService屬于服務(wù),接下來我們先看一下服務(wù)的入口onCreate()方法:

通過上面的分析,我們懷疑這里的SoftInputWindow是軟鍵盤彈出創(chuàng)建的Dialog對(duì)象,下面我們看下SoftInputWindow的源碼。

看到這里大家就能明白了,為什么說軟鍵盤就是一個(gè)Dialog。而且這里通過設(shè)置Gravity.BOTTOM來控制當(dāng)前Dialog在Window中的位置。

在Android中,可以通過給Activity設(shè)置 windowSoftInputMode 這個(gè)屬性來控制軟鍵盤與Activity的主窗口的交互方式。

Activity 的主窗口與包含屏幕軟鍵盤的窗口的交互方式,該屬性的設(shè)置影響兩個(gè)方面:

該設(shè)置必須是下面所列的值之一,或者是一個(gè)“state…”值加上一個(gè)“adjust…”值的組合,在任一組中設(shè)置多個(gè)值(例如,多個(gè)“state…”值)都會(huì)產(chǎn)生未定義結(jié)果。各值之間使用垂直條 (|) 分隔。

下面將通過例子來介紹 adjustNoting 、 adjustUnspecified 、 adjustResize 、 adjustPan 在軟鍵盤彈出的區(qū)別:

非滾動(dòng)布局xml

點(diǎn)擊最下面的EditText12

滾動(dòng)布局xml

通過上面的例子,我們可以完全理解adjust系列的各個(gè)參數(shù)的作用。而軟鍵盤的顯示和隱藏這里面需要并不多,而且內(nèi)容并不算復(fù)雜,大家回去自己嘗試下就可以。

在日常開發(fā)中,如果需要將軟鍵盤的Enter鍵更改為其他鍵,可以設(shè)置其 android:imeOptions 屬性,這個(gè)屬性可以控制軟鍵盤的Enter鍵,以及橫屏情況下的軟鍵盤顯示狀態(tài)。

該設(shè)置必須是下面所列的值之一,或者是一個(gè)“action…”值加上一個(gè)“flag…”值的組合,在action…組中設(shè)置多個(gè)值(例如,多個(gè)“action…”值)都會(huì)產(chǎn)生未定義結(jié)果,而flag….可以設(shè)置多個(gè)。各值之間使用垂直條 (|) 分隔

控制軟鍵盤上的Enter鍵

橫屏下控制軟鍵盤

總結(jié)一下:

這里大部分的屬性,已經(jīng)介紹完畢,如果英語好的同學(xué),可以去看下官方文檔,可以更好的理解,并且本文以搜狗輸入法為實(shí)踐,可能其他的輸入法與其顯示的不同,但是功能應(yīng)該都是一樣的。

而如果要在橫屏狀態(tài)不希望軟鍵盤全屏顯示最好是將flagNoFullscreen和flagNoExtractUi結(jié)合使用,這樣體驗(yàn)上會(huì)更好

android:imeOptions=”flagNoFullscreen|flagNoExtractUi”

Android官網(wǎng)的Api

如果需要監(jiān)聽軟鍵盤的右下角的按鍵,需要為EditText設(shè)置setOnEditorActionListener()監(jiān)聽:

上面的方式,只是展示了如何監(jiān)聽各個(gè)按鍵的方法,如果需要消費(fèi)事件,則需要return true。

(1)第一次寫這么長的博客,感覺會(huì)有一些不足,各位看官如果有不合理的地方,或者有誤的地方請(qǐng)直接指出。

(2)本來想整理成一個(gè)Demo的,后來簡單看來下,該有的幾乎都貼出來了,有需要的可以按需復(fù)制就可以。

(3)寫完這篇博客之后,感覺博客干貨還是不多,所以定位這篇文章算是總結(jié)性質(zhì)加上實(shí)際案例性質(zhì)的博客。

(4)Android軟鍵盤的總結(jié)就差不多到這里,希望各位看官,如果看到這里有收獲,就點(diǎn)點(diǎn)贊,灌灌水,頂一波,這樣博主才有寫下去的動(dòng)力。

(5)感謝小輝同學(xué)的校驗(yàn),調(diào)整了文章中不通順的地方。

1.徹底搞定Android開發(fā)中軟鍵盤的常見問題

2.Android UI(EditText)詳解

;fps=1

3.微信軟鍵盤布局閃動(dòng)問題

關(guān)于Android中的軟鍵盤

原文鏈接:徹底搞定Android開發(fā)中軟鍵盤的常見問題

軟件盤的本質(zhì)是什么?軟鍵盤其實(shí)是一個(gè)Dialog。

InputMethodService為我們的輸入法創(chuàng)建了一個(gè)Dialog,并且將該Dialog的Window的某些參數(shù)(如Gravity)進(jìn)行了設(shè)置,使之能夠在底部或者全屏顯示。當(dāng)我們點(diǎn)擊輸入框時(shí),系統(tǒng)對(duì)活動(dòng)主窗口進(jìn)行調(diào)整,從而為輸入法騰出相應(yīng)的空間,然后將該Dialog顯示在底部,或者全屏顯示。

軟鍵盤顯示的調(diào)整

Android 定義了一個(gè)屬性,名字為windowSoftInputMode, 這個(gè)屬性用于設(shè)置Activity主窗口與軟鍵盤的交互模式,用于避免軟鍵盤遮擋內(nèi)容的問題。我們可以在AndroidManifet.xml中對(duì)Activity進(jìn)行設(shè)置。如:android:windowSoftInputMode=”stateUnchanged|adjustPan”。 該屬性可選的值有兩部分,一部分為軟鍵盤的狀態(tài)控制,控制軟鍵盤是隱藏還是顯示,另一部分是Activity窗口的調(diào)整,以便騰出空間展示軟鍵盤。 android:windowSoftInputMode的屬性設(shè)置必須是下面中的一個(gè)值,或一個(gè)”state”值加一個(gè)”adjust”值的組合,各個(gè)值之間用 | 分開。

stateUnspecified-未指定狀態(tài) :當(dāng)我們沒有設(shè)置android:windowSoftInputMode屬性的時(shí)候,軟件默認(rèn)采用的就是這種交互方式,系統(tǒng)會(huì)根據(jù)界面采取相應(yīng)的軟鍵盤的顯示模式。

stateUnchanged-不改變狀態(tài) :當(dāng)前界面的軟鍵盤狀態(tài),取決于上一個(gè)界面的軟鍵盤狀態(tài),無論是隱藏還是顯示。

stateHidden-隱藏狀態(tài) :當(dāng)設(shè)置該狀態(tài)時(shí),軟鍵盤總是被隱藏,不管是否有輸入的需求。

stateAlwaysHidden-總是隱藏狀態(tài) :當(dāng)設(shè)置該狀態(tài)時(shí),軟鍵盤總是被隱藏,和stateHidden不同的是,當(dāng)我們跳轉(zhuǎn)到下個(gè)界面,如果下個(gè)頁面的軟鍵盤是顯示的,而我們?cè)俅位貋淼臅r(shí)候,軟鍵盤就會(huì)隱藏起來。

stateVisible-可見狀態(tài) :當(dāng)設(shè)置為這個(gè)狀態(tài)時(shí),軟鍵盤總是可見的,即使在界面上沒有輸入框的情況下也可以強(qiáng)制彈出來出來。

stateAlwaysVisible-總是顯示狀態(tài) :當(dāng)設(shè)置為這個(gè)狀態(tài)時(shí),軟鍵盤總是可見的,和stateVisible不同的是,當(dāng)我們跳轉(zhuǎn)到下個(gè)界面,如果下個(gè)頁面軟鍵盤是隱藏的,而我們?cè)俅位貋淼臅r(shí)候,軟鍵盤就會(huì)顯示出來。

adjustUnspecified-未指定模式 :設(shè)置軟鍵盤與軟件的顯示內(nèi)容之間的顯示關(guān)系。當(dāng)你跟我們沒有設(shè)置這個(gè)值的時(shí)候,這個(gè)選項(xiàng)也是默認(rèn)的設(shè)置模式。在這中情況下,系統(tǒng)會(huì)根據(jù)界面選擇不同的模式。

adjustResize-調(diào)整模式 :該模式下窗口總是調(diào)整屏幕的大小用以保證軟鍵盤的顯示空間;這個(gè)選項(xiàng)不能和adjustPan同時(shí)使用,如果這兩個(gè)屬性都沒有被設(shè)置, 系統(tǒng)會(huì)根據(jù)窗口中的布局自動(dòng)選擇其中一個(gè) 。

adjustPan-默認(rèn)模式 :該模式下通過不會(huì)調(diào)整來保證軟鍵盤的空間,而是采取了另外一種策略,系統(tǒng)會(huì)通過布局的移動(dòng),來保證用戶要進(jìn)行輸入的輸入框肯定在用戶的視野范圍里面,從而讓用戶可以看到自己輸入的內(nèi)容。

案例

沒有滾動(dòng)布局xml

對(duì)于沒有滾動(dòng)控件的布局來說,adjustPan就是默認(rèn)的設(shè)置,比如我們案例應(yīng)用中的文本輸入8,上面的文本輸入框123和按鈕都會(huì)被頂上去,且頁面布局不可以滾動(dòng)。

對(duì)于沒有滾動(dòng)控件的布局來說,整個(gè)布局會(huì)網(wǎng)上偏移(包括標(biāo)題等)以保證輸入框的可見。如果有滾動(dòng)控件,那么就是內(nèi)容網(wǎng)上偏移,標(biāo)題不會(huì)動(dòng),還可以通關(guān)滾動(dòng)來查看被頂上去的內(nèi)容,而這點(diǎn)是不可滾動(dòng)的布局所不具備的

有滾動(dòng)布局xml

對(duì)于有滾動(dòng)控件的布局,則是采用的adjustResize方式,比如我們案例應(yīng)用中的文本輸入8,上面的文本輸入框123和按鈕都會(huì)被頂上去, 可以通過滾動(dòng)來查看被頂上去的內(nèi)容。

** 根據(jù)這一原理,我們就可以把開發(fā)中遇到的軟鍵盤遮擋頁面的問題,利用ScrollView當(dāng)做根布局,讓系統(tǒng)采用adjustResize模式,很好地解決這一問題。**

自動(dòng)彈出軟鍵盤

有時(shí)候需要一進(jìn)入Activity后就自動(dòng)彈出軟鍵盤,可以通過設(shè)置一個(gè)時(shí)間函數(shù)來實(shí)現(xiàn),具體寫法如下:

方法一:

方法二:

有時(shí)進(jìn)入Activity后不希望系統(tǒng)自動(dòng)彈出軟鍵盤,我們可以按照下面的方法來實(shí)現(xiàn):

方法一:

在AndroidMainfest.xml中選擇那個(gè)activity,設(shè)置windowSoftInputMode屬性為adjustUnspecified|stateHidden

方法二:

讓EditText失去焦點(diǎn),使用EditText的clearFocus方法

方法三:

強(qiáng)制隱藏Android輸入法窗口

方法四:

EditText始終不彈出軟件鍵盤

EditText設(shè)置ScrollView壓縮背景圖片解決辦法

在你的Activity里加上

有時(shí)希望根據(jù)條件動(dòng)態(tài)關(guān)閉軟鍵盤,我們可以使用InputMethodManager類,按照下面的方法來實(shí)現(xiàn):

方法一:

方法二:

強(qiáng)制隱藏軟鍵盤,這個(gè)方法倒是很實(shí)用。

方法三:

方法四:

在onclick事件下.以下方法可行.(如果是EditText失去焦點(diǎn)/得到焦點(diǎn),沒有效果)

InputMethodManager的具體用法可以參考下面的鏈接:

使用android:imeOptinos可對(duì)Android自帶的軟鍵盤進(jìn)行一些界面上的設(shè)置:

android:imeOptions="flagNoExtractUi" //使軟鍵盤不全屏顯示,只占用一部分屏幕

同時(shí),這個(gè)屬性還能控件軟鍵盤右下角按鍵的顯示內(nèi)容,默認(rèn)情況下為回車鍵

android:imeOptions="actionNone" //輸入框右側(cè)不帶任何提示 android:imeOptions="actionGo" //右下角按鍵內(nèi)容為'開始' android:imeOptions="actionSearch" //右下角按鍵為放大鏡圖片,搜索 android:imeOptions="actionSend" //右下角按鍵內(nèi)容為'發(fā)送' android:imeOptions="actionNext" //右下角按鍵內(nèi)容為'下一步' android:imeOptions="actionDone" //右下角按鍵內(nèi)容為'完成'

同時(shí),可能EditText添加相應(yīng)的監(jiān)聽器,捕捉用戶點(diǎn)擊了軟鍵盤右下角按鈕的監(jiān)聽事件,以便進(jìn)行處理。

開發(fā)中有個(gè)需求是將頁面底部的一個(gè)按鈕頂起,但是開發(fā)時(shí)發(fā)現(xiàn)Android5.0以后的版本設(shè)置了adjustResize屬性后無法成功頂起。糾結(jié)了好久,最后在stackoverflow找到解決方案,那就是在根布局上加上fitsSystemWindow=”true”即可。

這里的fitsSystemWindow具體的作用就是你的**contentview是否忽略actionbar,title,屏幕的底部虛擬按鍵,將整個(gè)屏幕當(dāng)作可用的空間。 **

正常情況,contentview可用的空間是去除了actionbar,title,底部按鍵的空間后剩余的可用區(qū)域;這個(gè)屬性設(shè)置為true,則忽略,false則不忽略

在edittext上加入Android:imeOptions=”actionSearch”這個(gè)屬性沒響應(yīng),最后發(fā)現(xiàn)在2.3及以上版本不起作用,解決方案:加上

因?yàn)檩斎敕ㄦI盤右下角默認(rèn)的回車鍵本來就是換行用的,當(dāng)設(shè)置單行后,回車換行就失去作用了,這樣就可以設(shè)置為搜索、發(fā)送、go等等。

Android 軟鍵盤的彈出及關(guān)閉

一、彈出:

方法1(推薦,此種方式可以自動(dòng)彈出,無需延遲):

方法2(此種方式需要延遲一段時(shí)間,等UI加載完畢之后方能生效。但這個(gè)加載時(shí)間因不同手機(jī)而無法統(tǒng)一。你的手機(jī)好點(diǎn),可能100毫秒就加載完畢,我的手機(jī)差點(diǎn),可能需要1000毫秒才能加載完成。因此無法保證一定能自動(dòng)彈出軟鍵盤):

方法3(推薦。原理同上,只是不需要自己寫死延遲時(shí)間。因?yàn)椴煌謾C(jī)UI加載完畢所需時(shí)間可能不一樣,這種方法比較保險(xiǎn),總是在UI加載完畢之后彈出,靈活性較好。而方法2延遲時(shí)間是寫死的700毫秒,有可能在一些性能比較差的手機(jī),700毫秒內(nèi)UI還無法加載完畢,因此無法自動(dòng)彈出軟鍵盤。也有可能因?yàn)槭謾C(jī)性能太好,100毫秒就加載完UI,而后面的600毫秒就算白等了,靈活性、可靠性及用戶體驗(yàn)都很差):

二、關(guān)閉(如果是在Dialog中彈出的,則一定要在Dialog關(guān)閉前關(guān)閉軟鍵盤;如果是在Activity中彈出的,則一定要在finish之前關(guān)閉軟鍵盤):

方法1:

方法2(推薦):


文章標(biāo)題:android鍵盤,android鍵盤aosp停止運(yùn)行
分享網(wǎng)址:http://weahome.cn/article/dsijscc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部