android: fix fullscreen without virtual navigation
This commit is contained in:
parent
c82fdf1a0d
commit
9e6d9131ee
@ -9,6 +9,7 @@ import androidx.annotation.RequiresApi;
|
||||
import com.github.pengfeizhou.jscore.JSString;
|
||||
import com.github.pengfeizhou.jscore.JavaValue;
|
||||
import com.qmuiteam.qmui.util.QMUIKeyboardHelper;
|
||||
import com.qmuiteam.qmui.util.QMUIStatusBarHelper;
|
||||
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
@ -50,7 +51,13 @@ public class KeyboardPlugin extends DoricJavaPlugin {
|
||||
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
|
||||
int usableHeight = metrics.heightPixels;
|
||||
|
||||
final int virtualNavigationHeight = realHeight - usableHeight;
|
||||
boolean navigationBarShow = DoricUtils.checkNavigationBarShow(activity, activity.getWindow());
|
||||
final int space;
|
||||
if (navigationBarShow) {
|
||||
space = realHeight - usableHeight;
|
||||
} else {
|
||||
space = QMUIStatusBarHelper.getStatusbarHeight(activity);
|
||||
}
|
||||
|
||||
QMUIKeyboardHelper.setVisibilityEventListener(activity, new QMUIKeyboardHelper.KeyboardVisibilityEventListener() {
|
||||
@Override
|
||||
@ -66,9 +73,9 @@ public class KeyboardPlugin extends DoricJavaPlugin {
|
||||
data.put("oldBottomMargin", 0);
|
||||
data.put("bottomMargin", 0);
|
||||
data.put("oldHeight", keyboardHeight);
|
||||
data.put("height", DoricUtils.px2dp(heightDiff - virtualNavigationHeight));
|
||||
data.put("height", DoricUtils.px2dp(heightDiff - space));
|
||||
|
||||
keyboardHeight = DoricUtils.px2dp(heightDiff - virtualNavigationHeight);
|
||||
keyboardHeight = DoricUtils.px2dp(heightDiff - space);
|
||||
|
||||
callback.resolve(new JavaValue(data));
|
||||
} catch (JSONException e) {
|
||||
|
@ -21,13 +21,18 @@ import android.content.ContextWrapper;
|
||||
import android.content.res.AssetManager;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.Point;
|
||||
import android.graphics.Rect;
|
||||
import android.os.Build;
|
||||
import android.util.DisplayMetrics;
|
||||
import android.util.Pair;
|
||||
import android.view.Display;
|
||||
import android.view.View;
|
||||
import android.view.Window;
|
||||
import android.view.WindowManager;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.RequiresApi;
|
||||
|
||||
import com.github.pengfeizhou.jscore.JSArray;
|
||||
import com.github.pengfeizhou.jscore.JSDecoder;
|
||||
@ -329,4 +334,25 @@ public class DoricUtils {
|
||||
}
|
||||
return context;
|
||||
}
|
||||
|
||||
|
||||
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
|
||||
public static boolean checkNavigationBarShow(@NonNull Context context, @NonNull Window window) {
|
||||
boolean show;
|
||||
Display display = window.getWindowManager().getDefaultDisplay();
|
||||
Point point = new Point();
|
||||
display.getRealSize(point);
|
||||
|
||||
View decorView = window.getDecorView();
|
||||
Configuration conf = context.getResources().getConfiguration();
|
||||
if (Configuration.ORIENTATION_LANDSCAPE == conf.orientation) {
|
||||
View contentView = decorView.findViewById(android.R.id.content);
|
||||
show = (point.x != contentView.getWidth());
|
||||
} else {
|
||||
Rect rect = new Rect();
|
||||
decorView.getWindowVisibleDisplayFrame(rect);
|
||||
show = (rect.bottom != point.y);
|
||||
}
|
||||
return show;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user