【移動(dòng)應(yīng)用開發(fā)技術(shù)】如何在Android項(xiàng)目中顯示與隱藏軟鍵盤_第1頁(yè)
【移動(dòng)應(yīng)用開發(fā)技術(shù)】如何在Android項(xiàng)目中顯示與隱藏軟鍵盤_第2頁(yè)
【移動(dòng)應(yīng)用開發(fā)技術(shù)】如何在Android項(xiàng)目中顯示與隱藏軟鍵盤_第3頁(yè)
【移動(dòng)應(yīng)用開發(fā)技術(shù)】如何在Android項(xiàng)目中顯示與隱藏軟鍵盤_第4頁(yè)
【移動(dòng)應(yīng)用開發(fā)技術(shù)】如何在Android項(xiàng)目中顯示與隱藏軟鍵盤_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論