![【移動(dòng)應(yīng)用開發(fā)技術(shù)】如何在Android項(xiàng)目中顯示與隱藏軟鍵盤_第1頁(yè)](http://file4.renrendoc.com/view/7c57c81c23d0c8fcd68c1d6a8256191f/7c57c81c23d0c8fcd68c1d6a8256191f1.gif)
![【移動(dòng)應(yīng)用開發(fā)技術(shù)】如何在Android項(xiàng)目中顯示與隱藏軟鍵盤_第2頁(yè)](http://file4.renrendoc.com/view/7c57c81c23d0c8fcd68c1d6a8256191f/7c57c81c23d0c8fcd68c1d6a8256191f2.gif)
![【移動(dòng)應(yīng)用開發(fā)技術(shù)】如何在Android項(xiàng)目中顯示與隱藏軟鍵盤_第3頁(yè)](http://file4.renrendoc.com/view/7c57c81c23d0c8fcd68c1d6a8256191f/7c57c81c23d0c8fcd68c1d6a8256191f3.gif)
![【移動(dòng)應(yīng)用開發(fā)技術(shù)】如何在Android項(xiàng)目中顯示與隱藏軟鍵盤_第4頁(yè)](http://file4.renrendoc.com/view/7c57c81c23d0c8fcd68c1d6a8256191f/7c57c81c23d0c8fcd68c1d6a8256191f4.gif)
![【移動(dòng)應(yīng)用開發(fā)技術(shù)】如何在Android項(xiàng)目中顯示與隱藏軟鍵盤_第5頁(yè)](http://file4.renrendoc.com/view/7c57c81c23d0c8fcd68c1d6a8256191f/7c57c81c23d0c8fcd68c1d6a8256191f5.gif)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開發(fā)技術(shù)】如何在Android項(xiàng)目中顯示與隱藏軟鍵盤
本篇文章為大家展示了如何在Android項(xiàng)目中顯示與隱藏軟鍵盤,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。一、軟鍵盤顯示的原理
軟件盤的本質(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顯示在底部,或者全屏顯示。二、活動(dòng)主窗口調(diào)整
android定義了一個(gè)屬性,名字為windowSoftInputMode,用它可以讓程序可以控制活動(dòng)主窗口調(diào)整的方式。我們可以在AndroidManifet.xml中對(duì)Activity進(jìn)行設(shè)置。如:android:windowSoftInputMode="stateUnchanged|adjustPan"
該屬性可選的值有兩部分,一部分為軟鍵盤的狀態(tài)控制,另一部分是活動(dòng)主窗口的調(diào)整。前一部分本文不做討論,請(qǐng)讀者自行查閱android文檔。模式一,壓縮模式
windowSoftInputMode的值如果設(shè)置為adjustResize,那么該Activity主窗口總是被調(diào)整大小以便留出軟鍵盤的空間。我們通過一段代碼來測(cè)試一下,當(dāng)我們?cè)O(shè)置了該屬性后,彈出輸入法時(shí),系統(tǒng)做了什么。重寫Layout布局:public
class
ResizeLayout
extends
LinearLayout{
private
static
int
count
=
0;
public
ResizeLayout(Context
context,
AttributeSet
attrs)
{
super(context,
attrs);
}
@Override
protected
void
onSizeChanged(int
w,
int
h,
int
oldw,
int
oldh)
{
super.onSizeChanged(w,
h,
oldw,
oldh);
Log.e("onSizeChanged
"
+
count++,
"=>onResize
called!
w="+w
+
",h="+h+",oldw="+oldw+",oldh="+oldh);
}
@Override
protected
void
onLayout(boolean
changed,
int
l,
int
t,
int
r,
int
b)
{
super.onLayout(changed,
l,
t,
r,
b);
Log.e("onLayout
"
+
count++,
"=>OnLayout
called!
l="
+
l
+
",
t="
+
t
+
",r="
+
r
+
",b="+b);
}
@Override
protected
void
onMeasure(int
widthMeasureSpec,
int
heightMeasureSpec)
{
super.onMeasure(widthMeasureSpec,
heightMeasureSpec);
Log.e("onMeasure
"
+
count++,
"=>onMeasure
called!
widthMeasureSpec="
+
widthMeasureSpec
+
",
heightMeasureSpec="
+
heightMeasureSpec);
}xml:<com.winuxxan.inputMethodTest.ResizeLayout
xmlns:android="/apk/res/android"
android:id="@+id/root_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<LinearLayout
android:id="@+id/bottom_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:gravity="bottom">s
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:background="#77777777"
/>
</LinearLayout>
</com.winuxxan.inputMethodTest.ResizeLayout>AndroidManifest.xml的Activity設(shè)置屬性:android:windowSoftInputMode="adjustResize"運(yùn)行程序,點(diǎn)擊文本框,查看調(diào)試信息:E/onMeasure
6(7960):
=>onMeasure
called!
widthMeasureSpec=1073742144,
heightMeasureSpec
=
1073742024
E/onMeasure
7(7960):
=>onMeasure
called!
widthMeasureSpec=1073742144,
heightMeasureSpec
=
1073742025
E/onSizeChanged
8(7960):
=>onSizeChanged
called!
w=320,h=201,oldw=320,oldh=377
E/onLayout
9(7960):
=>OnLayout
called!
l=0,
t=0,r=320,b=201從調(diào)試結(jié)果我們可以看出,當(dāng)我們點(diǎn)擊文本框后,根布局調(diào)用了onMeasure,onSizeChanged和onLayout。實(shí)際上,當(dāng)設(shè)置為adjustResize后,軟鍵盤彈出時(shí),要對(duì)主窗口布局重新進(jìn)行measure和layout,而在layout時(shí),發(fā)現(xiàn)窗口的大小發(fā)生的變化,因此調(diào)用了onSizeChanged。從下圖的運(yùn)行結(jié)果我們也可以看出,原本在下方的TextView被頂?shù)搅溯斎敕ǖ纳戏健?/p>
模式二,平移模式windowSoftInputMode的值如果設(shè)置為adjustPan,那么該Activity主窗口并不調(diào)整屏幕的大小以便留出軟鍵盤的空間。相反,當(dāng)前窗口的內(nèi)容將自動(dòng)移動(dòng)以便當(dāng)前焦點(diǎn)從不被鍵盤覆蓋和用戶能總是看到輸入內(nèi)容的部分。這個(gè)通常是不期望比調(diào)整大小,因?yàn)橛脩艨赡荜P(guān)閉軟鍵盤以便獲得與被覆蓋內(nèi)容的交互操作。上面的例子中,我們將AndroidManifest.xml的屬性進(jìn)行更改:android:windowSoftInputMode="adjustPan"重新運(yùn)行,并點(diǎn)擊文本框,查看調(diào)試信息:E/onMeasure
6(8378):
=>onMeasure
called!
widthMeasureSpec=1073742144,
heightMeasureSpec=1073742200
E/onMeasure
7(8378):
=>onMeasure
called!
widthMeasureSpec=1073742144,
heightMeasureSpec=1073742201
E/onLayout
8(8378):
=>OnLayout
called!
l=0,
t=0,r=320,b=377我們看到:系統(tǒng)也重新進(jìn)行了measrue和layout,但是我們發(fā)現(xiàn),layout過程中onSizeChanged并沒有調(diào)用,這說明輸入法彈出前后并沒有改變?cè)胁季值拇笮 南聢D的運(yùn)行結(jié)果我們可以看到,下方的TextView并沒有被頂?shù)捷斎敕ㄉ戏健?/p>
事實(shí)上,當(dāng)輸入框不會(huì)被遮擋時(shí),該模式?jīng)]有對(duì)布局進(jìn)行調(diào)整,然而當(dāng)輸入框?qū)⒁徽趽鯐r(shí),窗口就會(huì)進(jìn)行平移。也就是說,該模式始終是保持輸入框?yàn)榭梢?。如下圖,整個(gè)窗口,包括標(biāo)題欄均被上移,以保證文本框可見模式三自動(dòng)模式
當(dāng)屬性windowSoftInputMode被設(shè)置為adjustUspecified時(shí),它不被指定是否
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年五年級(jí)語文上冊(cè)教學(xué)總結(jié)樣本(二篇)
- 2025年個(gè)人商鋪?zhàn)夥亢贤瑯?biāo)準(zhǔn)版本(三篇)
- 醫(yī)藥行業(yè)物流運(yùn)輸合同范文
- 加油站裝修項(xiàng)目居間協(xié)議
- 城市道路監(jiān)理居間合同
- 乳制品低溫運(yùn)輸托運(yùn)協(xié)議
- 醫(yī)療器械無菌運(yùn)輸管理合同
- 海鮮冷鏈物流代理合同
- 酒泉灰色燒結(jié)磚施工方案
- 市政項(xiàng)目渣土清理運(yùn)輸協(xié)議
- 呆死帳的發(fā)生與預(yù)防課件
- 10000中國(guó)普通人名大全
- 導(dǎo)數(shù)常見函數(shù)圖像
- 起重機(jī)械安裝吊裝危險(xiǎn)源辨識(shí)、風(fēng)險(xiǎn)評(píng)價(jià)表
- 華北理工兒童口腔醫(yī)學(xué)教案06兒童咬合誘導(dǎo)
- 中國(guó)建筑項(xiàng)目管理表格
- 高一3班第一次月考總結(jié)班會(huì)課件
- 公共政策分析導(dǎo)論教學(xué)課件匯總完整版電子教案
- 我國(guó)油菜生產(chǎn)機(jī)械化技術(shù)(-119)
- 大跨度斜拉橋上部結(jié)構(gòu)施工技術(shù)(圖文并茂)
- 論人口模型論文計(jì)劃生育政策調(diào)整對(duì)人口數(shù)量結(jié)構(gòu)及其影響
評(píng)論
0/150
提交評(píng)論