7.0
앱 테마를 FullScreen 으로 설정 하고, Manifest 에서 adjustResize 를 설정하면 스크롤이 되지 않는
문제가 발생하였다.
그럴때는 코드 단에서 아래 코드를 기입하면 해결 할 수 있다.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
setContentView(R.layout.main_layout);
}
setContentView 를 하기 전에 위 코드를 삽입하여 해결하자!!
4.x 와 7.x 에서는 정상 동작 하였다. (5.x 는 확인하지 못함. 디바이스가 없음. 좀 사주라)
그러나!! 두둥!!
6.x 마쉬멜로우 버전에서는 위 코드 가지고는 해결이 되지 않았다.
6.0 대의 버그라고나 할까?
아래 코드로 해결하자!
private FrameLayout.LayoutParams mFrameLayoutParams;
private View mChildView;
private int usableHeightPrevious;
protected void onCreate(Bundle savedInstanceState) {
FrameLayout frameLayout = (FrameLayout)findViewById(R.id.frameLayout);
mChildView = frameLayout.getChildAt(0);
mChildView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
resizeContent();
}
});
mFrameLayoutParams = (FrameLayout.LayoutParams)mChildView.getLayoutParams();
}
private void resizeContent() {
int usableHeightNow = computeUsableHeight();
if (usableHeightNow != usableHeightPrevious) {
int usableHeightSansKeyboard = mChildView.getRootView().getHeight();
int heightDifference = usableHeightSansKeyboard - usableHeightNow;
if (heightDifference > (usableHeightSansKeyboard/4)) {
// keyboard probably just became visible
mFrameLayoutParams.height = usableHeightSansKeyboard - heightDifference;
} else {
// keyboard probably just became hidden
mFrameLayoutParams.height = usableHeightSansKeyboard;
}
mChildView.requestLayout();
usableHeightPrevious = usableHeightNow;
}
}
private int computeUsableHeight() {
Rect r = new Rect();
mChildView.getWindowVisibleDisplayFrame(r);
return (r.bottom - r.top);
}