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