平常android開發過程當中,會遇到編輯框輸入內容彈出軟鍵盤,每每會出現鍵盤遮擋內容,或者出現頁面總體上移的,或多或少在體驗上都不是很優雅,今天提供個方法是自行控制頁面上移距離,竟可能讓頁面呈現給用戶友好點。android
通常咱們會在AndroidManifest.xml
裏配置windowSoftInputMode
來控制鍵盤與頁面的交互。ide
舉個栗子,一個簡單的登陸頁面。佈局
adjustResizecode
activity 加<activity android:windowSoftInputMode="adjustResize">
adjustResize
:Activity老是調整屏幕的大小以便留出軟鍵盤的空間,能夠看到頁面總體上移,最下面的一行字也能夠看到。
cdn
adjustPanserver
activity 加<activity android:windowSoftInputMode="adjustPan">
adjustPan
:當前窗口的內容將自動移動以便當前焦點不被鍵盤覆蓋,用戶能老是看到輸入內容的部分。
能夠發現頁面會自動移動,以便獲取焦點的editText 不被鍵盤遮住,可是肯定按鈕被遮住了,用戶須要自行隱藏鍵盤 再肯定。
xml
而我想要的效果是用戶輸入過程當中 肯定 按鈕一直可見,且要底部的內容被遮擋,這就須要咱們本身控制頁面上移距離。
監聽鍵盤彈出/隱藏的過程,獲取鍵盤高度,計算須要上移的高度,以便按鈕可見。blog
//監聽鍵盤彈出/隱藏 container.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { @Override public void onGlobalLayout() { Rect rect = new Rect(); //getWindowVisibleDisplayFrame 獲取當前窗口可視區域大小 getWindow().getDecorView().getWindowVisibleDisplayFrame(rect); int screenHeight = getWindow().getDecorView().getHeight(); //鍵盤彈出時,可視區域大小改變,屏幕高度 - 窗口可視區域高度 = 鍵盤彈出高度 int softHeight = screenHeight - rect.bottom; /** * 上移的距離 = 鍵盤的高度 - 按鈕距離屏幕底部的高度(若是手機高度很大,上移的距離會是負數,界面將不會上移) * 按鈕距離屏幕底部的高度是用屏幕高度 - 按鈕底部距離父佈局頂部的高度 * 注意這裏 btn.getBottom() 是按鈕底部距離父佈局頂部的高度,這裏也就是距離最外層佈局頂部高度 */ int scrollDistance = softHeight - (screenHeight - btn.getBottom()); if (scrollDistance > 0) { //具體移動距離可自行調整 container.scrollTo(0, scrollDistance + 60); } else { //鍵盤隱藏,頁面復位 container.scrollTo(0, 0); } } });
效果以下:
開發