728x90
안드로이드 풀스크린에서 키보드 겹침 문제 해결, 안드로이드 풀스크린에서 소프트키보드 밀어내기
안드로이드 애플리케이션 개발 중 EditText 영역을 클릭했을때 키보드가 올라와 텍스트 입력영역을 가리는 이슈가 있었다.
입력 자체기능에는 문제가 없지만 보면서 입력을 못하는 사태가 발생해 수정 해야 하는 상황인데,
검색중에 찾아낸것은 windowSoftInputMode 옵션에 adjustResize 혹은 adjustPan 을 주라는것.
그래서 AndroidManifest.xml 파일에 android:windowSoftInputMode="adjustResize" 를 주고 시도 해보았으나 실패.
android:windowSoftInputMode="adjustPan" 마저 실패 해버리고 그 이유에 대해 검색 하다 나온 결론은 fullscreenmode dosen't resize.
이게 뭔소린가 싶기도하고 멘탈도 바스러져 가는 찰나 언제나 나에게 큰 도움을 주는 자칭 '갓'택오버플로우 stackoverflow에서 해답이 나왔다.
먼저 이 클래스를 복사하거나 코딩하여 자신의 패키지 안에 위치시킨다.
public class AndroidBug5497Workaround {
// For more information, see https://code.google.com/p/android/issues/detail?id=5497
// To use this class, simply invoke assistActivity() on an Activity that already has its content view set.
public static void assistActivity (Activity activity) {
new AndroidBug5497Workaround(activity);
}
private View mChildOfContent;
private int usableHeightPrevious;
private FrameLayout.LayoutParams frameLayoutParams;
private AndroidBug5497Workaround(Activity activity) {
FrameLayout content = (FrameLayout) activity.findViewById(android.R.id.content);
mChildOfContent = content.getChildAt(0);
mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
public void onGlobalLayout() {
possiblyResizeChildOfContent();
}
});
frameLayoutParams = (FrameLayout.LayoutParams) mChildOfContent.getLayoutParams();
}
private void possiblyResizeChildOfContent() {
int usableHeightNow = computeUsableHeight();
if (usableHeightNow != usableHeightPrevious) {
int usableHeightSansKeyboard = mChildOfContent.getRootView().getHeight();
int heightDifference = usableHeightSansKeyboard - usableHeightNow;
if (heightDifference > (usableHeightSansKeyboard/4)) {
// keyboard probably just became visible
frameLayoutParams.height = usableHeightSansKeyboard - heightDifference;
} else {
// keyboard probably just became hidden
frameLayoutParams.height = usableHeightSansKeyboard;
}
mChildOfContent.requestLayout();
usableHeightPrevious = usableHeightNow;
}
}
private int computeUsableHeight() {
Rect r = new Rect();
mChildOfContent.getWindowVisibleDisplayFrame(r);
return (r.bottom - r.top);
}
}
사용법은 간단하다.
onCreate 이후에 아래 메소드를 호출해주면 된다.
AndroidBug5497Workaround.assistActivity(this);
원리는 간단하다. 키보드를 찾아서 크기를 구하고 그 크기만큼 뷰 크기를 확보하는것.
아주 간단하지만 귀찮은것을 이사람이 해주었다!
너무 고마워서 백업 겸 남겨둔다.
역시 스택오버플로우
'it > programming' 카테고리의 다른 글
네이버 API 변경 가이드 (0) | 2016.01.29 |
---|---|
OWASP Top 10 List 에 대한 정리 (0) | 2015.10.30 |
[MS-SQL] 달력그려주는 쿼리 (0) | 2015.07.03 |