android:windowSoftInputMode屬性詳解

設(shè)置不自動(dòng)彈出軟鍵盤的最簡(jiǎn)潔解決方案

在Activity的清單文件中,添加屬性
android:windowSoftInputMode="stateHidden"
如下

       <activity  
           android:name=".PulishSellInfoActivity"  
           android:windowSoftInputMode="stateHidden" >  
       </activity>  

android:windowSoftInputMode屬性

上面簡(jiǎn)單的介紹了一下如何實(shí)現(xiàn)軟鍵盤不自動(dòng)彈出,使用的方法是設(shè)置android:windowSoftInputMode屬性。那么买鸽,這個(gè)屬性到底是干什么的式塌,他有什么作用呢林艘?這一節(jié)墓陈,就是探索android:windowSoftInputMode屬性的作用的井仰。
首先埋嵌,我們從這個(gè)屬性的名稱中,可以很直觀的看出它的作用俱恶,這個(gè)屬性就是來(lái)設(shè)置窗口軟鍵盤的交互模式的雹嗦。

android:windowSoftInputMode屬性一共有9個(gè)取值,分別是:

  • stateUnspecified
  • stateUnchanged
  • stateHidden
  • stateAlwaysHidden
  • stateVisible
  • stateAlwaysVisible
  • adjustUnspecified
  • adjustResize
  • adjustPan

我們?cè)O(shè)置屬性的時(shí)候合是,可以在這9個(gè)值里面選擇一個(gè)了罪,也可以用"state...|adjust"的形式進(jìn)行設(shè)置。那么聪全,這些取值到底是怎么影響到軟鍵盤與窗口之間的交互的呢捶惜?下面,我們就一個(gè)個(gè)的測(cè)試這9個(gè)取值荔烧,到底是如何影響軟鍵盤的顯示的吱七。

1.stateUnspecified

中文意思是未指定狀態(tài),當(dāng)我們沒(méi)有設(shè)置android:windowSoftInputMode屬性的時(shí)候鹤竭,軟件默認(rèn)采用的就是這種交互方式踊餐,系統(tǒng)會(huì)根據(jù)界面采取相應(yīng)的軟鍵盤的顯示模式,比如臀稚,當(dāng)界面上只有文本和按鈕的時(shí)候吝岭,軟鍵盤就不會(huì)自動(dòng)彈出,因?yàn)闆](méi)有輸入的必要吧寺。那么窜管,當(dāng)界面上出現(xiàn)了獲取了焦點(diǎn)的輸入框的時(shí)候,軟鍵盤會(huì)不會(huì)自動(dòng)的彈出呢稚机?這個(gè)還真不一定幕帆!比如,在下面的這個(gè)界面布局中赖条,軟鍵盤并不會(huì)自動(dòng)彈出失乾。

1.png

就是說(shuō),默認(rèn)的纬乍,在這種界面情況下碱茁,系統(tǒng)并不確定用戶是否需要軟鍵盤,因此不會(huì)自動(dòng)彈出仿贬。但是纽竣,為什么說(shuō)不一定呢?這是因?yàn)椋绻覀冊(cè)谶@個(gè)布局的外面蜓氨,包裹上一個(gè)
ScrollView聋袋,軟鍵盤就會(huì)自動(dòng)的彈出來(lái)了!

如下语盈,在這種布局文件下舱馅,軟鍵盤會(huì)自動(dòng)的彈出

<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" >  
  
    <ScrollView  
        android:layout_width="match_parent"  
        android:layout_height="match_parent" >  
  
        <LinearLayout  
            android:layout_width="match_parent"  
            android:layout_height="wrap_content"  
            android:orientation="vertical" >  
  
            <Button  
                android:layout_width="match_parent"  
                android:layout_height="wrap_content"  
                android:onClick="toOther"  
                android:text="跳轉(zhuǎn)" />  
  
            <EditText  
                android:layout_width="match_parent"  
                android:layout_height="wrap_content" />  
        </LinearLayout>  
    </ScrollView>  
  
</LinearLayout>  

這確實(shí)是一個(gè)很奇怪的判斷方式缰泡。因此刀荒,我們可以得出結(jié)論,當(dāng)設(shè)置屬性為stateUnspecified的時(shí)候棘钞,系統(tǒng)是默認(rèn)不彈出軟鍵盤的缠借,但是當(dāng)有獲得焦點(diǎn)的輸入框的界面有滾動(dòng)的需求的時(shí)候,會(huì)自動(dòng)彈出軟鍵盤宜猜。至于為什么非要強(qiáng)調(diào)要獲取焦點(diǎn)的輸入框泼返,這是因?yàn)椋绻皇禽斎肟颢@取焦點(diǎn)姨拥,軟鍵盤也是不會(huì)自動(dòng)彈出的绅喉,讓界面不自動(dòng)彈出軟鍵盤的其中一個(gè)解決方案,就是在xml文件中叫乌,設(shè)置一個(gè)非輸入框控件獲取焦點(diǎn)柴罐,從而阻止鍵盤彈出。

2.stateUnchanged

中文的意思就是狀態(tài)不改變的意思憨奸,我們應(yīng)該怎么理解這句話呢革屠?其實(shí)很好理解,就是說(shuō)排宰,當(dāng)前界面的軟鍵盤狀態(tài)似芝,取決于上一個(gè)界面的軟鍵盤狀態(tài)。舉個(gè)例子板甘,假如當(dāng)前界面鍵盤是隱藏的党瓮,那么跳轉(zhuǎn)之后的界面,軟鍵盤也是隱藏的盐类;如果當(dāng)前界面是顯示的麻诀,那么跳轉(zhuǎn)之后的界面,軟鍵盤也是顯示狀態(tài)傲醉。

3.stateHidden

顧名思義蝇闭,如果我們?cè)O(shè)置了這個(gè)屬性,那么鍵盤狀態(tài)一定是隱藏的硬毕,不管上個(gè)界面什么狀態(tài)呻引,也不管當(dāng)前界面有沒(méi)有輸入的需求,反正就是不顯示吐咳。因此逻悠,我們可以設(shè)置這個(gè)屬性元践,來(lái)控制軟鍵盤不自動(dòng)的彈出。

4.stateAlwaysHidden

這個(gè)屬性也可以讓軟鍵盤隱藏童谒,但是我暫時(shí)還不知道和stateHidden屬性的區(qū)別单旁,本來(lái)想去stackOverFlow上問(wèn)一下的,但是饥伊,Great Wall象浑,呵呵呵...祝愿病魔早日戰(zhàn)勝方校長(zhǎng)

5.stateVisible

設(shè)置為這個(gè)屬性,可以將軟鍵盤召喚出來(lái)琅豆,即使在界面上沒(méi)有輸入框的情況下也可以強(qiáng)制召喚出來(lái)愉豺。

6.stateAlwaysVisible

這個(gè)屬性也是可以將鍵盤召喚出來(lái),但是與stateVisible屬性有小小的不同之處茫因。舉個(gè)例子蚪拦,當(dāng)我們?cè)O(shè)置為stateVisible屬性,如果當(dāng)前的界面鍵盤是顯示的冻押,當(dāng)我們點(diǎn)擊按鈕跳轉(zhuǎn)到下個(gè)界面的時(shí)候驰贷,軟鍵盤會(huì)因?yàn)檩斎肟蚴ソ裹c(diǎn)而隱藏起來(lái),當(dāng)我們?cè)俅位氐疆?dāng)前界面的時(shí)候洛巢,鍵盤這個(gè)時(shí)候是隱藏的括袒。但是如果我們?cè)O(shè)置為stateAlwaysVisible,我們跳轉(zhuǎn)到下個(gè)界面狼渊,軟鍵盤還是隱藏的箱熬,但是當(dāng)我們?cè)俅位貋?lái)的時(shí)候,軟鍵盤是會(huì)顯示出來(lái)的狈邑。所以城须,這個(gè)Always就解釋了這個(gè)區(qū)別,不管什么情況到達(dá)當(dāng)前界面(正常跳轉(zhuǎn)或者是上一個(gè)界面被用戶返回)米苹,軟鍵盤都是顯示狀態(tài)糕伐。

說(shuō)到這里,我聯(lián)想到了上面的stateHidden和stateAlwaysHidden蘸嘶,我估計(jì)區(qū)別也是這樣的良瞧,就是說(shuō),stateAlwaysHidden無(wú)論如何都是隱藏的训唱,但是如果在跳轉(zhuǎn)到下個(gè)界面的時(shí)候褥蚯,軟鍵盤被召喚出來(lái)了,那么當(dāng)下個(gè)界面被用戶返回的時(shí)候况增,鍵盤應(yīng)該是不會(huì)被隱藏的赞庶,但是,我還沒(méi)有找到能夠跳轉(zhuǎn)到下個(gè)界面,還讓當(dāng)前界面軟鍵盤不消失的方法歧强,所以暫時(shí)不能驗(yàn)證澜薄。

7.adjustUnspecified

從這個(gè)屬性開始,就不是設(shè)置軟鍵盤的顯示與隱藏模式了摊册,而是設(shè)置軟鍵盤與軟件的顯示內(nèi)容之間的顯示關(guān)系肤京。當(dāng)你跟我們沒(méi)有設(shè)置這個(gè)值的時(shí)候,這個(gè)選項(xiàng)也是默認(rèn)的設(shè)置模式茅特。在這中情況下忘分,系統(tǒng)會(huì)根據(jù)界面選擇不同的模式。如果界面里面有可以滾動(dòng)的控件温治,比如ScrowView饭庞,系統(tǒng)會(huì)減小可以滾動(dòng)的界面的大小戒悠,從而保證即使軟鍵盤顯示出來(lái)了熬荆,也能夠看到所有的內(nèi)容。如果布局里面沒(méi)有滾動(dòng)的控件绸狐,那么軟鍵盤可能就會(huì)蓋住一些內(nèi)容卤恳,我們從下面的圖中可以看出差別。

沒(méi)有滾動(dòng)控件寒矿,軟鍵盤下面的布局都被遮擋住了突琳,若想修改,只能隱藏軟鍵盤符相,然后選擇拆融。而且,重點(diǎn)注意一下上面的布局啊终,當(dāng)我們選擇的輸入框偏下的時(shí)候镜豹,上面的標(biāo)題欄和布局被軟鍵盤頂上去了。記住這個(gè)特征蓝牲,因?yàn)楹竺嬗袀€(gè)屬性和這個(gè)的效果不一樣趟脂。

2.png

布局里面有滑動(dòng)控件,系統(tǒng)會(huì)自動(dòng)的縮小整個(gè)界面的大小例衍,因此昔期,我們可以軟鍵盤上面的小區(qū)域中顯示所有的輸入框。

3.png

這就是兩中顯示模式之間的差別佛玄。

8.adjustResize

這個(gè)屬性表示Activity的主窗口總是會(huì)被調(diào)整大小硼一,從而保證軟鍵盤顯示空間。
我們先看顯示效果梦抢。
注意觀察這個(gè)上面的標(biāo)題欄和按鈕般贼,設(shè)置為adjustResize屬性之后,對(duì)于沒(méi)有滑動(dòng)控件的布局,雖然還是不能選擇所有的輸入框具伍,但是翅雏,窗口的顯示方式發(fā)生了變化,默認(rèn)屬性時(shí)人芽,整個(gè)布局是被頂上去了望几,但是設(shè)置為adjustResize屬性,布局的位置并沒(méi)有發(fā)生什么變化萤厅,這就是最大的區(qū)別橄抹。

4.png

而對(duì)于有滑動(dòng)控件的布局來(lái)說(shuō),顯示效果和默認(rèn)是一樣的惕味。


5.png
9.adjustPan

如果設(shè)置為這個(gè)屬性楼誓,那么Activity的屏幕大小并不會(huì)調(diào)整來(lái)保證軟鍵盤的空間,而是采取了另外一種策略名挥,系統(tǒng)會(huì)通過(guò)布局的移動(dòng)疟羹,來(lái)保證用戶要進(jìn)行輸入的輸入框肯定在用戶的失業(yè)范圍里面,從而讓用戶可以看到自己輸入的內(nèi)容禀倔。對(duì)于沒(méi)有滾動(dòng)控件的布局來(lái)說(shuō)榄融,這個(gè)其實(shí)就是默認(rèn)的設(shè)置,如果我們選擇的位置偏下救湖,上面的標(biāo)題欄和部分控件會(huì)被頂上去愧杯。但是對(duì)于有滾動(dòng)控件的布局來(lái)說(shuō),則不太一樣鞋既,我們看下面的效果圖力九。
首先,這是軟鍵盤沒(méi)有彈出的時(shí)候邑闺,有滾動(dòng)控件的顯示范圍跌前,最下面顯示的是9.

6.png

當(dāng)我們點(diǎn)擊5這個(gè)輸入框,我們會(huì)發(fā)現(xiàn)下面的現(xiàn)象检吆。
最上面只能夠顯示到按鈕舒萎,標(biāo)題欄已經(jīng)不能看到了。

7.png

而最下面也只能滑動(dòng)到8蹭沛,下面的內(nèi)容也不能夠滑動(dòng)了臂寝。


8.png

因此,我們就能夠理解這個(gè)屬性的作用了摊灭。

通過(guò)以上的實(shí)驗(yàn)咆贬,我們可以得出結(jié)論,如果我們不設(shè)置"adjust..."的屬性帚呼,對(duì)于沒(méi)有滾動(dòng)控件的布局來(lái)說(shuō)掏缎,采用的是adjustPan方式皱蹦,而對(duì)于有滾動(dòng)控件的布局,則是采用的adjustResize方式眷蜈。

了解了上面的這些知識(shí)之后沪哺,我們就可以根據(jù)自己的需求設(shè)置不同的方式了。而且酌儒,關(guān)于如何使得界面加載的時(shí)候不顯示軟鍵盤辜妓,我們也有了一個(gè)很清楚的認(rèn)識(shí)。
晚安忌怎,在假期里還在奮斗的程序員們籍滴。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市榴啸,隨后出現(xiàn)的幾起案子孽惰,更是在濱河造成了極大的恐慌,老刑警劉巖鸥印,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勋功,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡辅甥,警方通過(guò)查閱死者的電腦和手機(jī)酝润,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門燎竖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)璃弄,“玉大人,你說(shuō)我怎么就攤上這事构回∠目椋” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵纤掸,是天一觀的道長(zhǎng)脐供。 經(jīng)常有香客問(wèn)我,道長(zhǎng)借跪,這世上最難降的妖魔是什么政己? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮掏愁,結(jié)果婚禮上歇由,老公的妹妹穿的比我還像新娘。我一直安慰自己果港,他們只是感情好沦泌,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著辛掠,像睡著了一般谢谦。 火紅的嫁衣襯著肌膚如雪释牺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天回挽,我揣著相機(jī)與錄音没咙,去河邊找鬼。 笑死千劈,一個(gè)胖子當(dāng)著我的面吹牛镜撩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播队塘,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼袁梗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了憔古?” 一聲冷哼從身側(cè)響起遮怜,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鸿市,沒(méi)想到半個(gè)月后锯梁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡焰情,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年陌凳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片内舟。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡合敦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出验游,到底是詐尸還是另有隱情充岛,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布耕蝉,位于F島的核電站崔梗,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏垒在。R本人自食惡果不足惜蒜魄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望场躯。 院中可真熱鬧谈为,春花似錦、人聲如沸推盛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)耘成。三九已至榔昔,卻和暖如春驹闰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撒会。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工嘹朗, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人诵肛。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓屹培,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親怔檩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子褪秀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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