Android應(yīng)用中出現(xiàn)軟鍵盤不兼容如何解決-創(chuàng)新互聯(lián)

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)Android應(yīng)用中出現(xiàn)軟鍵盤不兼容如何解決,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

站在用戶的角度思考問題,與客戶深入溝通,找到順德網(wǎng)站設(shè)計與順德網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站制作、網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國際域名空間、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋順德地區(qū)。

重寫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); 
 }

我們的布局設(shè)置為:

<com.winuxxan.inputMethodTest.ResizeLayout 
 xmlns:android="http://schemas.android.com/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à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ào)用了onMeasure,onSizeChanged和onLayout。

  windowSoftInputMode的值如果設(shè)置為adjustPan,那么該Activity主窗口并不調(diào)整屏幕的大小以便留出軟鍵盤的空間。相反,當(dāng)前窗口的內(nèi)容將自動移動以便當(dāng)前焦點從不被鍵盤覆蓋和用戶能總是看到輸入內(nèi)容的部分。這個通常是不期望比調(diào)整大小,因為用戶可能關(guān)閉軟鍵盤以便獲得與被覆蓋內(nèi)容的交互操作。

    上面的例子中,我們將AndroidManifest.xml的屬性進(jìn)行更改:android: windowSoftInputMode = "adjustPan"

    重新運(yù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)用,這說明輸入法彈出前后并沒有改變原有布局的大小。

當(dāng)然還有其他屬性可以設(shè)置:

"stateUnspecified"

軟鍵盤的狀態(tài)(是否它是隱藏或可見)沒有被指定。系統(tǒng)將選擇一個合適的狀態(tài)或依賴于主題的設(shè)置。

這個是為了軟件盤行為默認(rèn)的設(shè)置。

"stateUnchanged"

軟鍵盤被保持無論它上次是什么狀態(tài),是否可見或隱藏,當(dāng)主窗口出現(xiàn)在前面時。

"stateHidden"

當(dāng)用戶選擇該Activity時,軟鍵盤被隱藏——也就是,當(dāng)用戶確定導(dǎo)航到該Activity時,而不是返回到它由于離開另一個Activity。

"stateAlwaysHidden"

軟鍵盤總是被隱藏的,當(dāng)該Activity主窗口獲取焦點時。

"stateVisible"

軟鍵盤是可見的,當(dāng)那個是正常合適的時(當(dāng)用戶導(dǎo)航到Activity主窗口時)。

"stateAlwaysVisible"

當(dāng)用戶選擇這個Activity時,軟鍵盤是可見的——也就是,也就是,當(dāng)用戶確定導(dǎo)航到該Activity時,而不是返回到它由于離開另一個Activity。

"adjustUnspecified"

它不被指定是否該Activity主窗口調(diào)整大小以便留出軟鍵盤的空間,或是否窗口上的內(nèi)容得到屏幕上當(dāng)前的焦點是可見的。系統(tǒng)將自動選擇這些模式中一種主要依賴于是否窗口的內(nèi)容有任何布局視圖能夠滾動他們的內(nèi)容。如果有這樣的一個視圖,這個窗口將調(diào)整大小,這樣的假設(shè)可以使?jié)L動窗口的內(nèi)容在一個較小的區(qū)域中可見的。這個是主窗口默認(rèn)的行為設(shè)置。

"adjustResize"

該Activity主窗口總是被調(diào)整屏幕的大小以便留出軟鍵盤的空間

"adjustPan"

該Activity主窗口并不調(diào)整屏幕的大小以便留出軟鍵盤的空間。相反,當(dāng)前窗口的內(nèi)容將自動移動以便當(dāng)前焦點從不被鍵盤覆蓋和用戶能總是看到輸入內(nèi)容的部分。這個通常是不期望比調(diào)整大小,因為用戶可能關(guān)閉軟鍵盤以便獲得與被覆蓋內(nèi)容的交互操作。

上述就是小編為大家分享的Android應(yīng)用中出現(xiàn)軟鍵盤不兼容如何解決了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)站標(biāo)題:Android應(yīng)用中出現(xiàn)軟鍵盤不兼容如何解決-創(chuàng)新互聯(lián)
轉(zhuǎn)載來源:http://muchs.cn/article14/dpjige.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器App設(shè)計、建站公司微信小程序、網(wǎng)站排名外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作