文章連接:mp.weixin.qq.com/s/1gkMtLu0B…android
平常android開發過程當中,會遇到編輯框輸入內容彈出軟鍵盤,每每會出現鍵盤遮擋內容,或者出現頁面總體上移的,或多或少在體驗上都不是很優雅,今天提供個方法是自行控制頁面上移距離,竟可能讓頁面呈現給用戶友好點。git
通常咱們會在AndroidManifest.xml
裏配置windowSoftInputMode
來控制鍵盤與頁面的交互。github
舉個栗子,一個簡單的登陸頁面。bash
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地址:github.com/taixiang/In…3d
歡迎關注個人我的博客:www.manjiexiang.cn/
更多精彩歡迎關注微信號:春風十里不如認識你
一塊兒學習,一塊兒進步,歡迎上車,有問題隨時聯繫,一塊兒解決!!!