QMUI_Android
QMUI_Android copied to clipboard
targetSdkVersion>=30,QMUIStatusBarHelper.getStatusbarHeight无法正确获取状态栏高度
- [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;
}
今天我也碰到这个问题了,有解决办法或者思路吗?