当我们通过下面代码:
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
设置状态栏透明,当界面存在EditText时,在activity里面设置windowSoftInputMode:adjustResize 无效,软键盘依然会遮挡住EditText的焦点位置。
通过下面方式可以解决,大致解决思路是,通过监听视图树的变化,然后把界面滑动到软键盘的上面。
public class WindowSoftModeAdjustResizeExecutor {
// For more information, see /p/android/issues/detail?id=5497
// To use this class, simply invoke assistActivity() on an Activity that already has its content view set.
// CREDIT TO Joseph Johnson (/users/341631/joseph-johnson) for publishing the original Android solution on
public static void assistActivity(Activity activity) {
new WindowSoftModeAdjustResizeExecutor(activity);
}
private View mChildOfContent;
private int usableHeightPrevious;
private frameLayoutParams;
private WindowSoftModeAdjustResizeExecutor(Activity activity) {
FrameLayout content = (FrameLayout) ();
mChildOfContent = (0);
().addOnGlobalLayoutListener(new () {
public void onGlobalLayout() {
possiblyResizeChildOfContent();
}
});
frameLayoutParams = () ();
}
private void possiblyResizeChildOfContent() {
int usableHeightNow = computeUsableHeight();
if (usableHeightNow != usableHeightPrevious) {
int usableHeightSansKeyboard = ().getHeight();
int heightDifference = usableHeightSansKeyboard - usableHeightNow;
= usableHeightSansKeyboard - heightDifference;
();
usableHeightPrevious = usableHeightNow;
}
}
private int computeUsableHeight() {
Rect r = new Rect();
(r);
if (.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
return ( - );
}
return ;
}
}
然后在setContentView()方法之后调用WindowSoftModeAdjustResizeExecutor.(this) 就ok了。