profile image

L o a d i n g . . .

반응형

안드로이드 adjustNothing 키보드 높이 구하기

Android adjustNothing get keyboard height

 

안드로이드에서는 키보드 높이를 구할 수 있는 메소드가 따로 없어 필요시 view계산을 통하여 키보드 높이를 구하여야 한다.

허나 adjustResize로 설정시 알아서 키보드 위로 뷰가 사이즈가 조절이 된다.

그래도 굳이 키보드 높이 adjustNothing 상태에서 키보드 높이를 구하여야 하는데 아래와 같은 코드를 참고하면 된다.

public class HeightProvider extends PopupWindow implements OnGlobalLayoutListener {
    private Activity mActivity;
    private View rootView;
    private HeightListener listener;
    private int heightMax;

    public HeightProvider(Activity activity) {
        super(activity);
        this.mActivity = activity;

        rootView = new View(activity);
        setContentView(rootView);

        rootView.getViewTreeObserver().addOnGlobalLayoutListener(this);
        setBackgroundDrawable(new ColorDrawable(0));

        setWidth(0);
        setHeight(LayoutParams.MATCH_PARENT);

        setSoftInputMode(LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
        setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);
    }

    public HeightProvider init() {
        if (!isShowing()) {
            final View view = mActivity.getWindow().getDecorView();
            view.post(new Runnable() {
                @Override
                public void run() {
                    showAtLocation(view, Gravity.NO_GRAVITY, 0, 0);
                }
            });
        }
        return this;
    }

    public HeightProvider setHeightListener(HeightListener listener) {
        this.listener = listener;
        return this;
    }

    @Override
    public void onGlobalLayout() {
        Rect rect = new Rect();
        rootView.getWindowVisibleDisplayFrame(rect);
        if (rect.bottom > heightMax) {
            heightMax = rect.bottom;
        }

        int keyboardHeight = heightMax - rect.bottom;
        if (listener != null) {
            listener.onHeightChanged(keyboardHeight);
        }
    }

    public interface HeightListener {
        void onHeightChanged(int height);
    }
}

해당 코드는 코틀린이 아닌 자바로 구현되어 있으며, 코틀린에서도 물론 아무 문제 없이 정상동작 한다.

 

해당 코드는 구글링을 통해 가져온 소스이며 원본 깃 헙은 아래에 링크해 두었다.

https://github.com/Crysis21/KeyboardHeightProvider

 

GitHub - Crysis21/KeyboardHeightProvider: Get android keyboard height using an overlay popup-window

Get android keyboard height using an overlay popup-window - GitHub - Crysis21/KeyboardHeightProvider: Get android keyboard height using an overlay popup-window

github.com

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        HeightProvider(this).init().setHeightListener {
            	// height = it
            }
        }
    }

해당 코드는 onCreate에 적용하여 height값을 받아올 수 있다.

키보드가 올라올 땐 키보드의 높이값을 반환하고, 키보드가 내려갔을 때는 0이 반환되는 것을 확인할 수 있다.

 

해당 코드는 코틀린으로 작성되었다.

반응형
복사했습니다!