5

Điều gì đã thay đổi trong Lollipop về chiều cao bàn phím?Lấy chiều cao bàn phím trong Lollipop

Tôi đã có phương pháp sử dụng getViewTreeObserver() trả lại chính xác chiều cao của bàn phím trên mọi phiên bản trước Lollipop (được kiểm tra trên ldpi, mdpi, hdpi và xhdpi - không có vấn đề) nhưng có vẻ như trên Lollipop lớn hơn chiều cao của bàn phím thực.

Trên Asus Nexus 7, tôi có chiều cao lớn hơn khoảng 70 px so với chiều cao thực tế.

Có ai biết làm thế nào để có được chiều cao bàn phím thực sự trên Lollipop?

+0

Ditto cho Nexus 5 và Moto G chạy Lollipop. Bất kỳ giải pháp cho đến nay? –

Trả lời

3

Hãy thử mã sau đây khi bàn phím mở ra.

@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

Cảm ơn iJose, nó hoạt động. –

+0

Bạn đang chào đón !! – iAviatorJose

+0

Tôi nghĩ là: nếu (Build.VERSION.SDK_INT> = 21) phải không? –

Các vấn đề liên quan