欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android中的windowSoftInputMode屬性詳解

 更新時(shí)間:2014年10月10日 10:25:41   投稿:junjie  
這篇文章主要介紹了Android中的windowSoftInputMode屬性詳解,本文對(duì)windowSoftInputMode的9個(gè)屬性做了詳細(xì)總結(jié),需要的朋友可以參考下

    在前面的一篇文章中,簡(jiǎn)單的介紹了一下如何實(shí)現(xiàn)軟鍵盤(pán)不自動(dòng)彈出,使用的方法是設(shè)置android:windowSoftInputMode屬性。那么,這個(gè)屬性到底是干什么的,他有什么作用呢?今天這篇文章,就是探索android:windowSoftInputMode屬性的作用的。

    首先,我們從這個(gè)屬性的名稱中,可以很直觀的看出它的作用,這個(gè)屬性就是來(lái)設(shè)置窗口軟鍵盤(pán)的交互模式的。

    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è)置。那么,這些取值到底是怎么影響到軟鍵盤(pán)與窗口之間的交互的呢?下面,我們就一個(gè)個(gè)的測(cè)試這9個(gè)取值,到底是如何影響軟鍵盤(pán)的顯示的。

    1.stateUnspecified

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



 就是說(shuō),默認(rèn)的,在這種界面情況下,系統(tǒng)并不確定用戶是否需要軟鍵盤(pán),因此不會(huì)自動(dòng)彈出。但是,為什么說(shuō)不一定呢?這是因?yàn)?,如果我們?cè)谶@個(gè)布局的外面,包裹上一個(gè)

ScrollView,軟鍵盤(pán)就會(huì)自動(dòng)的彈出來(lái)了!

如下,在這種布局文件下,軟鍵盤(pán)會(huì)自動(dòng)的彈出

復(fù)制代碼 代碼如下:

  <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)不彈出軟鍵盤(pán)的,但是當(dāng)有獲得焦點(diǎn)的輸入框的界面有滾動(dòng)的需求的時(shí)候,會(huì)自動(dòng)彈出軟鍵盤(pán)。至于為什么非要強(qiáng)調(diào)要獲取焦點(diǎn)的輸入框,這是因?yàn)椋绻皇禽斎肟颢@取焦點(diǎn),軟鍵盤(pán)也是不會(huì)自動(dòng)彈出的,讓界面不自動(dòng)彈出軟鍵盤(pán)的其中一個(gè)解決方案,就是在xml文件中,設(shè)置一個(gè)非輸入框控件獲取焦點(diǎn),從而阻止鍵盤(pán)彈出。

    2.stateUnchanged

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

    3.stateHidden

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

    4.stateAlwaysHidden

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

    5.stateVisible

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

    6.stateAlwaysVisible

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

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

    7.adjustUnspecified

    從這個(gè)屬性開(kāi)始,就不是設(shè)置軟鍵盤(pán)的顯示與隱藏模式了,而是設(shè)置軟鍵盤(pán)與軟件的顯示內(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)的界面的大小,從而保證即使軟鍵盤(pán)顯示出來(lái)了,也能夠看到所有的內(nèi)容。如果布局里面沒(méi)有滾動(dòng)的控件,那么軟鍵盤(pán)可能就會(huì)蓋住一些內(nèi)容,我們從下面的圖中可以看出差別。

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


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

 

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

    8.adjustResize

    這個(gè)屬性表示Activity的主窗口總是會(huì)被調(diào)整大小,從而保證軟鍵盤(pán)顯示空間。

    我們先看顯示效果。

    注意觀察這個(gè)上面的標(biāo)題欄和按鈕,設(shè)置為adjustResize屬性之后,對(duì)于沒(méi)有滑動(dòng)控件的布局,雖然還是不能選擇所有的輸入框,但是,窗口的顯示方式發(fā)生了變化,默認(rèn)屬性時(shí),整個(gè)布局是被頂上去了,但是設(shè)置為adjustResize屬性,布局的位置并沒(méi)有發(fā)生什么變化,這就是最大的區(qū)別。


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

    9.adjustPan

    如果設(shè)置為這個(gè)屬性,那么Activity的屏幕大小并不會(huì)調(diào)整來(lái)保證軟鍵盤(pán)的空間,而是采取了另外一種策略,系統(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ō),則不太一樣,我們看下面的效果圖。

    首先,這是軟鍵盤(pán)沒(méi)有彈出的時(shí)候,有滾動(dòng)控件的顯示范圍,最下面顯示的是9.


    當(dāng)我們點(diǎn)擊5這個(gè)輸入框,我們會(huì)發(fā)現(xiàn)下面的現(xiàn)象。

    最上面只能夠顯示到按鈕,標(biāo)題欄已經(jīng)不能看到了。


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

   因此,我們就能夠理解這個(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í)候不顯示軟鍵盤(pán),我們也有了一個(gè)很清楚的認(rèn)識(shí)。

    晚安,在假期里還在奮斗的程序員們。

相關(guān)文章

最新評(píng)論