其實這問題我也不知道有人看得懂嗎?不過出於自我紀錄的 blog 的概念,寫寫看。主要就是當你輸入 EditText 的時候,通常 android 系統會自動跳出 soft keyboard,方便使用者輸入,但是有些佈局,彈出來的 keyboard 會擋住 EditText 的輸入匡,讓使用者看不到。
老實說這樣的問題,有一百種出現的 UI,就可能會有一百種的問題根源,很多情況下可能要很 UI/UX 的設計師討論。基本上很難有銀彈去解決所有的問題。
我的情況則是如圖所示, 沒有出現鍵盤時,畫面如下,看起來沒有問題。
但是當我點擊 2 號輸入匡後就換自動跑出鍵盤,如下
有沒有發現,鍵盤畫面擋住了 2 號輸入匡,通常情況如果是使用 RecycleView ,系統會自動滑到 2 號輸入匡,方便使用者輸入,而不是被鍵盤蓋住。不過由於我的佈局稍微複雜一點,搞得不會自動滑過去。不過其實也就是 Activity with ViewPager(RecycleView inside Fragment) and Bottom TabLayout。
如果要談深一點就是
- 如果 manifest 有設定:Android:windowSoftInputMode = “adjustResize”, keyboard 出現時 app 會調用 onSizeChanged,所以有些人作法就是在這處理,將畫面物件重新整理。
- 也有人做法是利用 OnGlobalLayoutListener 監聽畫面變化,利用畫面高度判斷是否鍵盤有出現嗎?然後重新調整畫面物件配置。
http://stackoverflow.com/questions/2150078/how-to-check-visibility-of-software-keyboard-in-android
final View activityRootView = findViewById(R.id.activityRoot); activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { int heightDiff = activityRootView.getRootView().getHeight() - activityRootView.getHeight(); if (heightDiff > dpToPx(this, 200)) { // if more than 200 dp, it's probably a keyboard... // ... do something here } } });
不過老實說,上面兩種做法都需要配合 UI/UX 的鍵盤畫面搭配設計,這應該是最佳解。但是我並沒有那麼多資源,所以只打算做出輸入匡可以自動滑動到使用者能看到的地方。
最後我啥鬼都試過,發現只要 RecycleView 上外層加一個 NestedScrollView,並調整一下 ImageView 的位子就可以達到效果。
https://developer.android.com/reference/android/support/v4/widget/NestedScrollView.html
感謝各位看到這裡,也只能談到這裡,畢竟這有點個人化的問題。