5

Что изменилось в Lollipop относительно высоты клавиатуры?Получить высоту клавиатуры в Lollipop

У меня был метод, который с помощью getViewTreeObserver() правильно вернул высоту клавиатуры на каждую версию до Lollipop (протестирован на ldpi, mdpi, hdpi и xhdpi - без проблем), но кажется, что на Lollipop высота вернулась немного больше, чем высота реальной клавиатуры.

На моем Asus Nexus 7 я получил высоту с примерно 70 px больше, чем фактическая высота.

Кто-нибудь знает, как получить реальную высоту клавиатуры на Lollipop?

+0

Ditto для Nexus 5 и Moto G работает Lollipop. Какие-нибудь решения пока? –

ответ

3

Попробуйте этот следующий код, когда открывается клавиатура.

@TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) 
public int calculateScreenHeightForLollipop() { 
    WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); 
    Display display = wm.getDefaultDisplay(); 
    Point size = new Point(); 
    display.getSize(size); 
    return size.y; 
} 

/** 
* Call this function to resize the emoji popup according to your soft keyboard size 
*/ 
public void setSizeForSoftKeyboard() { 
    rootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      Rect r = new Rect(); 
      rootView.getWindowVisibleDisplayFrame(r); 
      int screenHeight; 
      if (Build.VERSION.SDK_INT >= 5.0) { 
       screenHeight = calculateScreenHeightForLollipop(); 
      } else { 
       screenHeight = rootView.getRootView().getHeight(); 
      } 
      int heightDifference = screenHeight 
        - (r.bottom - r.top); 
      int resourceId = mContext.getResources() 
        .getIdentifier("status_bar_height", 
          "dimen", "android"); 
      if (resourceId > 0) { 
       heightDifference -= mContext.getResources() 
         .getDimensionPixelSize(resourceId); 
      } 
      if (heightDifference > 100) { 
       keyBoardHeight = heightDifference; 
       setSize(LayoutParams.MATCH_PARENT, keyBoardHeight); 
       if (!isOpened) { 
        if (onSoftKeyboardOpenCloseListener != null) 
         onSoftKeyboardOpenCloseListener.onKeyboardOpen(keyBoardHeight); 
       } 
       isOpened = true; 
       if (pendingOpen) { 
        showAtBottom(); 
        pendingOpen = false; 
       } 
      } else { 
       isOpened = false; 
       if (onSoftKeyboardOpenCloseListener != null) 
        onSoftKeyboardOpenCloseListener.onKeyboardClose(); 
      } 
     } 
    }); 
} 
+1

Спасибо iJose, it'w работа. –

+0

Добро пожаловать! – iAviatorJose

+0

Я думаю, что это должно быть: if (Build.VERSION.SDK_INT> = 21) правильно? –

Смежные вопросы