마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

커스텀 레이아웃 사용중 소프트 키보드가 올라오면 onMeasure에서 처리하는 부분 질문

0 추천

안드로이드 초보 개발자 입니다..

소프트 키보드가 올라면 onMeasure 에서 커스텀 레이아웃 크기를 줄이거나 늘이는 코드를 짜고 있습니다.

밑에 코드는 onMeasure 안에 일부분입니다. 마지막 코드에서 크기를 줄이고 있는데

줄 인다음 다시 늘릴려니 늘어나지가 않네요.. 어떤식으로 바꿔야 늘어 날 수 있을 까요?

Point pt = new Point();

DisplayMetrics dm = mContext.getResources().getDisplayMetrics();
int height = dm.heightPixels;


if (height - r.bottom == 0 || height - r.bottom == height)
{
    LinearLayout layout_chat_list = findViewById(R.id.layout_chat_list);
    LinearLayout layout_chat_include = findViewById(R.id.layout_chat_include);
    LinearLayout.LayoutParams layout_chat_list_params = (LinearLayout.LayoutParams) layout_chat_list.getLayoutParams();
    LinearLayout.LayoutParams layout_chat_include_params = (LayoutParams) layout_chat_include.getLayoutParams();
    layout_chat_list_params.weight = 6f;
    layout_chat_include_params.weight = 1;
    layout_chat_list.setLayoutParams(layout_chat_list_params);
    layout_chat_include.setLayoutParams(layout_chat_include_params);

}
else {
    LinearLayout layout_chat_list = findViewById(R.id.layout_chat_list);
    LinearLayout layout_chat_include = findViewById(R.id.layout_chat_include);
    LinearLayout.LayoutParams layout_chat_list_params = (LinearLayout.LayoutParams) layout_chat_list.getLayoutParams();
    LinearLayout.LayoutParams layout_chat_include_params = (LayoutParams) layout_chat_include.getLayoutParams();
    layout_chat_list_params.weight = 3.95f;
    layout_chat_include_params.weight = 0;
    layout_chat_list.setLayoutParams(layout_chat_list_params);
    layout_chat_include.setLayoutParams(layout_chat_include_params);
}


this.setMeasuredDimension(r.right,r.bottom);
평범 (3,560 포인트) 님이 2018년 11월 1일 질문

1개의 답변

0 추천

자답입니다.

소프트 키보드를 직접적으로 알고 싶으면 ViewTreeObserver.OnGlobalLayoutListener를 이용해서 확인하면 되지만, 위 리스너는 1초에 여러번 호출을 하기 떄문에 비 효율적입니다.

따라서 customLayout을 구성하여 OnMeasure 메소드에서 간접적으로 소프트키보드가 올라왔을 때를 감지하여 전체 사이즈에서 소프트키보드 사이즈 만큼 빼서 화면 구성을 하면 됩니다.

참고로 전 weight를 쓰다 도저히 안되어 dp를 사용하여 해결하였습니다.

평범 (3,560 포인트) 님이 2018년 11월 5일 답변
...