android 記一次解決鍵盤遮擋問題

文章連接: https://mp.weixin.qq.com/s/1gkMtLu0BTXOUOj6isDjUw

平常android開發過程當中,會遇到編輯框輸入內容彈出軟鍵盤,每每會出現鍵盤遮擋內容,或者出現頁面總體上移的,或多或少在體驗上都不是很優雅,今天提供個方法是自行控制頁面上移距離,竟可能讓頁面呈現給用戶友好點。 android

通常咱們會在AndroidManifest.xml 裏配置windowSoftInputMode來控制鍵盤與頁面的交互。git

舉個栗子,一個簡單的登陸頁面。github

adjustResize

activity 加<activity android:windowSoftInputMode="adjustResize">
adjustResize:Activity老是調整屏幕的大小以便留出軟鍵盤的空間,能夠看到頁面總體上移,最下面的一行字也能夠看到。
微信

adjustPan

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

更多精彩歡迎關注微信號:春風十里不如認識你
一塊兒學習,一塊兒進步,歡迎上車,有問題隨時聯繫,一塊兒解決!!!

相關文章
相關標籤/搜索