文章連接: https://mp.weixin.qq.com/s/1gkMtLu0BTXOUOj6isDjUw
平常android開發過程當中,會遇到編輯框輸入內容彈出軟鍵盤,每每會出現鍵盤遮擋內容,或者出現頁面總體上移的,或多或少在體驗上都不是很優雅,今天提供個方法是自行控制頁面上移距離,竟可能讓頁面呈現給用戶友好點。 android
通常咱們會在AndroidManifest.xml
裏配置windowSoftInputMode
來控制鍵盤與頁面的交互。git
舉個栗子,一個簡單的登陸頁面。github
activity 加<activity android:windowSoftInputMode="adjustResize">
adjustResize
:Activity老是調整屏幕的大小以便留出軟鍵盤的空間,能夠看到頁面總體上移,最下面的一行字也能夠看到。
微信
activity 加<activity android:windowSoftInputMode="adjustPan">
adjustPan
:當前窗口的內容將自動移動以便當前焦點不被鍵盤覆蓋,用戶能老是看到輸入內容的部分。
能夠發現頁面會自動移動,以便獲取焦點的editText 不被鍵盤遮住,可是肯定按鈕被遮住了,用戶須要自行隱藏鍵盤 再肯定。
ide
而我想要的效果是用戶輸入過程當中 肯定 按鈕一直可見,且要底部的內容被遮擋,這就須要咱們本身控制頁面上移距離。
監聽鍵盤彈出/隱藏的過程,獲取鍵盤高度,計算須要上移的高度,以便按鈕可見。佈局
//監聽鍵盤彈出/隱藏 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); } } });
效果以下:
這樣用戶輸入完成以後就能夠直接點擊肯定按鈕,體驗上有所改善。 學習
固然,具體使用哪一種方法得看頁面需求。 spa
github地址:https://github.com/taixiang/Inputcode
歡迎關注個人我的博客:https://www.manjiexiang.cn/ server
更多精彩歡迎關注微信號:春風十里不如認識你
一塊兒學習,一塊兒進步,歡迎上車,有問題隨時聯繫,一塊兒解決!!!