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/
更多精彩歡迎關注微訊號:春風十里不如認識你
一起學習,一起進步,歡迎上車,有問題隨時聯絡,一起解決!!!
相關文章
- android 記一次解決鍵盤遮擋問題Android
- flutter - 使用 SingleChildScrollView() 解決鍵盤遮擋輸入框的問題FlutterView
- 利用flex佈局解決ios輸入框被鍵盤遮擋問題FlexiOS
- flutter dialog中軟鍵盤遮擋解決衝突Flutter
- scrollIntoView與鍵盤遮擋View
- 解決虛擬按鍵遮擋popupWindow
- react在安卓下輸入框被手機鍵盤遮擋問題React安卓
- env(safe-area-inset-bottom)解決ios底部小黑線遮擋問題iOS
- 修復蘋果iOS 原生鍵盤遮擋input框蘋果iOS
- React Native踩坑指南:ios鍵盤遮擋輸入框React NativeiOS
- Cypress 踩坑記 - DOM 遮擋
- (資料科學學習手札87)利用adjustText解決matplotlib文字標籤遮擋問題資料科學
- 直播平臺原始碼,關於彈出框中輸入框被遮擋問題解決原始碼
- powerpoint: 遮擋文字
- Android 解決表情皮膚和軟鍵盤切換時跳閃的問題Android
- 記一次 Composer 問題的解決過程!!
- 點選EditText的時候出現被鍵盤遮擋 在不使用scrollView的情況View
- Android輸入鍵盤隱藏解決方案Android
- 記錄一次解決App崩潰問題的解決方案APP
- 解決彈出層被Flash擋住的問題
- 記錄一次無法很好解決的問題
- 記一次用油猴無法hook問題解決Hook
- Flutter完整開發實戰詳解(二十、 Android PlatformView 和鍵盤問題)FlutterAndroidPlatformView
- 記一次Vue跨導航欄問題解決方案Vue
- Android 軟鍵盤踩坑記Android
- 記錄一次重灌電腦黑屏問題解決辦法與解決思路
- video同層播放層級過高遮擋模擬暫停按鈕的問題IDE
- 微信小程式使用echarts/資料重新整理重新渲染/圖層遮擋問題微信小程式Echarts
- 有效解決移動端虛擬鍵盤影響fixed定位問題
- 記一次Razor Pages無法編譯問題及解決編譯
- a-modal 使用 vxe-table 可編輯表格、下拉框被遮擋解決方法
- 一次 nginx 返回 302 問題解決Nginx
- android手機的微信H5彈出的軟鍵盤擋住了文字框,如何解決?AndroidH5
- 記一次 rr 和硬體斷點解決記憶體踩踏問題斷點記憶體
- mac外接鍵盤解決無法使用ctrl+c,ctrl+v... 問題Mac
- Flutter 疑難雜症系列:鍵盤原理及常見問題解決方案Flutter
- Android 解決BottomSheetDialog 拖曳衝突問題Android
- 記錄一次解決服務請求的跨域問題跨域