5

키보드 높이에 대한 Lollipop의 변경점은 무엇입니까?Lollipop에서 키보드 높이 가져 오기

나는 Lollipop (ldpi, mdpi, hdpi 및 xhdpi에서 테스트 됨 - 문제 없음) 이전의 모든 버전에서 getViewTreeObserver()을 올바르게 사용하여 키보드의 높이를 반환하는 방법이 있지만 Lollipop에서 반환되는 높이는 약간입니다 실제 키보드의 높이보다 큽니다.

내 Asus Nexus 7에서 실제 높이보다 약 70 픽셀 큰 높이가 있습니다.

누구나 Lollipop에서 실제 키보드 높이를 얻는 방법을 알고 있습니까?

+0

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

고마워요, 작동했습니다. –

+0

환영합니다 !! – iAviatorJose

+0

나는 그것이 있어야한다고 생각한다 : if (Build.VERSION.SDK_INT> = 21) 맞습니까? –