輸入法與窗口交互

1.我們在項目中經(jīng)常會遇到軟鍵盤遮擋頁面统屈,輸入框或者軟鍵盤自動彈出的場景寝并,在Android中Activity給我們提供了一個屬性<b>”windowSoftInputMode“</b>宪郊,專治輸入法對布局造成一系列的影響昼浦,我們只需要在<b>AndroidManifest.xml</b>文件中的activity中設置android:windowSoftInputMode屬性可以很好解決上面所說的問題吞加。

<activity android:name=".SecondActivity"
        android:windowSoftInputMode="屬性值"/>

2.windowSoftInputMode屬性的取值:
該屬性一共有<b>9種</b>取值问麸,分別為:

  • stateUnspecified
  • stateUnchanged
  • stateHidden
  • stateAlwaysHidden
  • stateVisible
  • stateAlwaysVisible
  • adjustUnspecified
  • adjustResize
  • adjustPan疗杉。
    下面通過例子來演示每個屬性值的作用

第一部分:設置軟鍵盤的顯示與隱藏

1.stateUnspecified

中文意思是未指定狀態(tài)阵谚,Activity默認采用的就是這種交互方式蚕礼,系統(tǒng)會根據(jù)界面采取相應的軟鍵盤的顯示模式,當界面上只有文本和按鈕的時候梢什,軟鍵盤就不會自動彈出奠蹬,因為沒有輸入的必要;當界面上出現(xiàn)了獲取了焦點的輸入框的時候嗡午,又分為兩種情況:

  • 1.第一種:有可輸入的控件囤躁,但是頁面不能滾動(不能自動彈出,需要點擊輸入框)
  • 2.第二種:有可輸入的控件并且頁面可以滾動(能夠自動彈出)在上面的基礎上在布局中加上一個ScrollView荔睹,是頁面能夠滾動
stateUnspecified

因此狸演,我們可以得出結論,當設置屬性為<b>stateUnspecified</b>的時候僻他,系統(tǒng)是默認不彈出軟鍵盤的宵距,但是當有獲得焦點的輸入框的界面有滾動的需求的時候,會自動彈出軟鍵盤吨拗。至于為什么非要強調要獲取焦點的輸入框满哪,這是因為,如果不是輸入框獲取焦點劝篷,軟鍵盤也是不會自動彈出的哨鸭,讓界面不自動彈出軟鍵盤的其中一個解決方案,就是在xml文件中娇妓,設置一個非輸入框控件獲取焦點像鸡,從而阻止鍵盤彈出。

2.stateUnchanged

中文的意思就是狀態(tài)不改變的意思峡蟋,作用就是當前界面的軟鍵盤狀態(tài)坟桅,取決于上一個界面的軟鍵盤狀態(tài)华望。也就是說假如當前界面鍵盤是隱藏的蕊蝗,那么跳轉之后的界面,軟鍵盤也是隱藏的赖舟;如果當前界面是顯示的蓬戚,那么跳轉之后的界面,軟鍵盤也是顯示狀態(tài)宾抓。

<!-- 第一個Actiivty為默認的子漩,頁面能夠滾動-->
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <!-- 第二個Activity:軟件盤狀態(tài)跟隨上一個頁面-->
    <activity android:name=".SecondActivity"
        android:windowSoftInputMode="stateUnchanged"/>
stateUnchanged

設置為該屬性,軟鍵盤的狀態(tài)會跟著上一個頁面走石洗,即使當前的頁面沒有可輸入的控件幢泼。

3.stateHidden

顧名思義,如果我們設置了這個屬性讲衫,那么鍵盤狀態(tài)一定是隱藏的缕棵,不管上個界面什么狀態(tài),也不管當前界面有沒有輸入的需求,反正就是不顯示招驴。因此篙程,我們可以設置這個屬性,來控制軟鍵盤不自動的彈出

 <!-- 第二個Activity:隱藏軟鍵盤-->
 <activity android:name=".SecondActivity"
        android:windowSoftInputMode="stateHidden"/>
stateHidden

4.stateAlwaysHidden

這個屬性也可以讓軟鍵盤隱藏别厘,目前測試跟stateHidden的效果一樣虱饿,還沒有測試出兩者的區(qū)別。

5.stateVisible

設置為這個屬性触趴,可以強制將軟鍵盤出來氮发,即使在界面上沒有輸入框的情況下。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.yt.demo.MainActivity">

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="20sp"
    android:text="沒有可輸入的控件"
    android:gravity="center"/>
</LinearLayout>
stateVisible

6.stateAlwaysVisible

這個屬性也是可以將鍵盤強制顯示出來冗懦,與stateVisible屬性不同之處在于:當我們設置為stateVisible屬性折柠,如當我們點擊按鈕跳轉到下個界面的時候,軟鍵盤會因為輸入框失去焦點而隱藏起來批狐,當我們再次回到當前界面的時候扇售,鍵盤這個時候是隱藏的。但是如果我們設置為stateAlwaysVisible嚣艇,我們跳轉到下個界面承冰,再次回來的時候,軟鍵盤是會顯示出來的食零。

 <activity android:name=".MainActivity"
        android:windowSoftInputMode="stateAlwaysVisible">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".SecondActivity" />
stateAlwaysVisible

第二部分:設置軟鍵盤與顯示內(nèi)容間的關系

1.adjustUnspecified

該屬性是默認的設置模式困乒。在這中情況下,系統(tǒng)會根據(jù)界面選擇不同的模式贰谣。如果界面里面有可以滾動的控件娜搂,比如ScrowView,系統(tǒng)會減小可以滾動的界面的大小吱抚,從而保證即使軟鍵盤顯示出來了百宇,也能夠看到所有的內(nèi)容。如果布局里面沒有滾動的控件秘豹,那么軟鍵盤可能就會蓋住一些內(nèi)容

沒有滾動可輸入在上方
沒有滾動有輸入在下方

如果沒有滾動控件携御,當可輸入的控件在上面時,軟件盤會遮擋內(nèi)容既绕;當可輸入的控件在下面時啄刹,內(nèi)容被頂上去了,同時標題欄也被頂上去了

有滾動可輸入在上方
有滾動可輸入在下方

如果有滾動控件凄贩,當可輸入的控件在上面時誓军,系統(tǒng)會減小可以滾動的界面的大小,從而保證即使軟鍵盤顯示出來了同時內(nèi)容可以滾動顯示出來疲扎;當可輸入的控件在下面時昵时,內(nèi)容被頂上去了廓译,但是標題欄沒有被頂上去。

2.adjustResize

這個屬性表示Activity的主窗口總是會被調整大小债查,從而保證軟鍵盤顯示空間非区。它跟adjustUnspecified的區(qū)別就在于當頁面可滾動并且可輸入控件在下面的時候,內(nèi)容被頂上去了盹廷,但是標題欄沒有被頂上去征绸。

可滾動有輸入在下方

3.adjustPan

Activity的屏幕大小并不會調整來保證軟鍵盤的空間,而是采取了另外一種策略俄占,系統(tǒng)會通過布局的移動管怠,來保證用戶要進行輸入的輸入框肯定在用戶的視線范圍內(nèi),從而讓用戶可以看到自己輸入的內(nèi)容缸榄。對于沒有滾動控件的布局來說渤弛,這個其實就是默認的設置,如果我們選擇的位置偏下甚带,上面的標題欄和部分控件會被頂上去她肯。但是對于有滾動控件的布局來說,則不太一樣鹰贵,我們看下面的效果圖晴氨。

不能滾動在上面
能滾動在上面

只要可輸入控件在上面,不管能否滾動碉输,軟件盤都會遮擋部分內(nèi)容的

不能滾動在下面
能滾動在下面

只要可輸入控件在下面籽前,不管能否滾動,內(nèi)容和標題欄都會被頂上去的敷钾。

第三部分:關于使用

上面第一部分介紹了軟件盤的顯示與隱藏枝哄,第二部分介紹了軟件盤與內(nèi)容之間的顯示關系,一般我們在使用的時候都是結合二者使用的阻荒。

android:windowSoftInputMode="【A】|【B】"http://A:為顯示屬性 B:為關系屬性
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挠锥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子财松,更是在濱河造成了極大的恐慌瘪贱,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辆毡,死亡現(xiàn)場離奇詭異,居然都是意外死亡甜害,警方通過查閱死者的電腦和手機舶掖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尔店,“玉大人眨攘,你說我怎么就攤上這事主慰。” “怎么了鲫售?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵共螺,是天一觀的道長。 經(jīng)常有香客問我情竹,道長藐不,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任秦效,我火速辦了婚禮雏蛮,結果婚禮上,老公的妹妹穿的比我還像新娘阱州。我一直安慰自己挑秉,他們只是感情好,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布苔货。 她就那樣靜靜地躺著犀概,像睡著了一般。 火紅的嫁衣襯著肌膚如雪夜惭。 梳的紋絲不亂的頭發(fā)上阱冶,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天翔始,我揣著相機與錄音宝当,去河邊找鬼。 笑死亲怠,一個胖子當著我的面吹牛若皱,可吹牛的內(nèi)容都是我干的镊叁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼走触,長吁一口氣:“原來是場噩夢啊……” “哼晦譬!你這毒婦竟也來了?” 一聲冷哼從身側響起互广,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤敛腌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后惫皱,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體像樊,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年旅敷,在試婚紗的時候發(fā)現(xiàn)自己被綠了生棍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡媳谁,死狀恐怖涂滴,靈堂內(nèi)的尸體忽然破棺而出友酱,到底是詐尸還是另有隱情,我是刑警寧澤柔纵,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布缔杉,位于F島的核電站,受9級特大地震影響搁料,放射性物質發(fā)生泄漏或详。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一加缘、第九天 我趴在偏房一處隱蔽的房頂上張望鸭叙。 院中可真熱鬧,春花似錦拣宏、人聲如沸沈贝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宋下。三九已至,卻和暖如春辑莫,著一層夾襖步出監(jiān)牢的瞬間学歧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工各吨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留枝笨,地道東北人。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓揭蜒,卻偏偏與公主長得像横浑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子屉更,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1徙融、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,979評論 3 119
  • 菜譜涼拌洋蔥木耳調料:蠔油、香油瑰谜、食鹽欺冀、白糖、食醋萨脑、醬油(可以選擇性的放點小米椒)做法:將洋蔥切成絲(按自己的要求...
    炫藏DJDZ閱讀 93評論 0 0
  • 快速完成一個新聞APP 本Demo主要使用的技術: 看標題就知道了 Material Design 聚合數(shù)據(jù) 效果...
    PageNoFound閱讀 636評論 1 7
  • 什么是 CSS hack 由于不同廠商的瀏覽器隐轩,比如Internet Explorer,Safari,Mozill...
    月光下的微笑閱讀 142評論 0 0