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


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

日常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/

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM