QMUI_Android icon indicating copy to clipboard operation
QMUI_Android copied to clipboard

targetSdkVersion>=30,QMUIStatusBarHelper.getStatusbarHeight无法正确获取状态栏高度

Open xiaozhi003 opened this issue 3 years ago • 1 comments

  • [x] 设备型号:OnePlus 9
  • [x] 设备系统版本:Android 11
  • [x] Gradle 版本:6.7.1
  • [x] AS版本:4.2.2
  • [x] QMUI Android 版本:2.0.0-alpha12

targetSdkVersion>=30,QMUIStatusBarHelper.getStatusbarHeight(getContext())无法正确获取状态栏高度

谷歌为非SDK接口制定了白名单(whitelist)、灰名单(greylist)、黑名单(blacklist)

当targetSdkVersion>=30时,无法通过反射正确获取状态栏高度

异常日志(堆栈)

clazz = Class.forName("com.android.internal.R$dimen");反射报错

2021-07-07 14:08:48.382 20752-20752/cn.eyecool.qmuidemo W/System.err: java.lang.InstantiationException: java.lang.Class<com.android.internal.R$dimen> has no zero argument constructor
2021-07-07 14:08:48.382 20752-20752/cn.eyecool.qmuidemo W/System.err:     at java.lang.Class.newInstance(Native Method)
2021-07-07 14:08:48.382 20752-20752/cn.eyecool.qmuidemo W/System.err:     at com.qmuiteam.qmui.util.QMUIStatusBarHelper.initStatusBarHeight(QMUIStatusBarHelper.java:438)
2021-07-07 14:08:48.383 20752-20752/cn.eyecool.qmuidemo W/System.err:     at com.qmuiteam.qmui.util.QMUIStatusBarHelper.getStatusbarHeight(QMUIStatusBarHelper.java:427)

建议

    public static int getStatusBarHeightCompat(Context context) {
        int result = 0;
        int resId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
        if (resId > 0) {
            result = context.getResources().getDimensionPixelOffset(resId);
        }
        if (result <= 0) {
            result = context.getResources().getDimensionPixelOffset(R.dimen.statusbar_view_height);
        }
        return result;
    }

xiaozhi003 avatar Jul 07 '21 06:07 xiaozhi003

今天我也碰到这个问题了,有解决办法或者思路吗?

dingziyang avatar Feb 17 '23 15:02 dingziyang