




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】如何在Android項目中顯示與隱藏軟鍵盤
本篇文章為大家展示了如何在Android項目中顯示與隱藏軟鍵盤,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。一、軟鍵盤顯示的原理
軟件盤的本質(zhì)是什么?軟鍵盤其實是一個Dialog!
InputMethodService為我們的輸入法創(chuàng)建了一個Dialog,并且將該Dialog的Window的某些參數(shù)(如Gravity)進行了設(shè)置,使之能夠在底部或者全屏顯示。當我們點擊輸入框時,系統(tǒng)對活動主窗口進行調(diào)整,從而為輸入法騰出相應(yīng)的空間,然后將該Dialog顯示在底部,或者全屏顯示。二、活動主窗口調(diào)整
android定義了一個屬性,名字為windowSoftInputMode,用它可以讓程序可以控制活動主窗口調(diào)整的方式。我們可以在AndroidManifet.xml中對Activity進行設(shè)置。如:android:windowSoftInputMode="stateUnchanged|adjustPan"
該屬性可選的值有兩部分,一部分為軟鍵盤的狀態(tài)控制,另一部分是活動主窗口的調(diào)整。前一部分本文不做討論,請讀者自行查閱android文檔。模式一,壓縮模式
windowSoftInputMode的值如果設(shè)置為adjustResize,那么該Activity主窗口總是被調(diào)整大小以便留出軟鍵盤的空間。我們通過一段代碼來測試一下,當我們設(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"運行程序,點擊文本框,查看調(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é)果我們可以看出,當我們點擊文本框后,根布局調(diào)用了onMeasure,onSizeChanged和onLayout。實際上,當設(shè)置為adjustResize后,軟鍵盤彈出時,要對主窗口布局重新進行measure和layout,而在layout時,發(fā)現(xiàn)窗口的大小發(fā)生的變化,因此調(diào)用了onSizeChanged。從下圖的運行結(jié)果我們也可以看出,原本在下方的TextView被頂?shù)搅溯斎敕ǖ纳戏健?/p>
模式二,平移模式windowSoftInputMode的值如果設(shè)置為adjustPan,那么該Activity主窗口并不調(diào)整屏幕的大小以便留出軟鍵盤的空間。相反,當前窗口的內(nèi)容將自動移動以便當前焦點從不被鍵盤覆蓋和用戶能總是看到輸入內(nèi)容的部分。這個通常是不期望比調(diào)整大小,因為用戶可能關(guān)閉軟鍵盤以便獲得與被覆蓋內(nèi)容的交互操作。上面的例子中,我們將AndroidManifest.xml的屬性進行更改:android:windowSoftInputMode="adjustPan"重新運行,并點擊文本框,查看調(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)也重新進行了measrue和layout,但是我們發(fā)現(xiàn),layout過程中onSizeChanged并沒有調(diào)用,這說明輸入法彈出前后并沒有改變原有布局的大小。從下圖的運行結(jié)果我們可以看到,下方的TextView并沒有被頂?shù)捷斎敕ㄉ戏健?/p>
事實上,當輸入框不會被遮擋時,該模式?jīng)]有對布局進行調(diào)整,然而當輸入框?qū)⒁徽趽鯐r,窗口就會進行平移。也就是說,該模式始終是保持輸入框為可見。如下圖,整個窗口,包括標題欄均被上移,以保證文本框可見模式三自動模式
當屬性windowSoftInputMode被設(shè)置為adjustUspecified時,它不被指定是否
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 培訓(xùn)綜合服務(wù)協(xié)議書范本
- 私人空調(diào)租賃合同協(xié)議
- 土地挖地合同協(xié)議
- 設(shè)備設(shè)計合同協(xié)議
- 采購部下半年工作計劃
- 小醫(yī)生體驗活動合同協(xié)議
- 工廠夫妻焊工合同協(xié)議
- 土方運輸單價合同協(xié)議
- 學校智能化設(shè)計
- 工商變更代辦合同協(xié)議
- 統(tǒng)編版語文六年級下冊第一單元“民風民俗”作業(yè)設(shè)計
- 改革開放與新時代知到智慧樹章節(jié)測試課后答案2024年秋同濟大學
- 雙全日培訓(xùn)課件
- 甲油膠行業(yè)報告
- 醫(yī)務(wù)人員職業(yè)暴露與防護講課
- 山東省萊西市2024-2025學年高一語文下學期3月月考試題含解析
- 康復(fù)科人員崗位考核制度(3篇)
- 實驗動物生物樣本質(zhì)量控制規(guī)范
- 智能機器人配送行業(yè)現(xiàn)狀分析及未來三至五年行業(yè)發(fā)展報告
- 炎癥性腸病的外科治療
- 復(fù)變函數(shù)與積分變換課程教案講義
評論
0/150
提交評論