Open
Description
int resourceId = Resources.getSystem().getIdentifier(key, "dimen", "android");
if (resourceId > 0) {
int sizeOne = context.getResources().getDimensionPixelSize(resourceId);
int sizeTwo = Resources.getSystem().getDimensionPixelSize(resourceId);
// android9以上版本,可以通过修改开发者选项里的刘海屏,Resources.getSystem()也会导致获得的状态栏高度不准确,
// 可以通过context.getResources()方式来获取准确的高度。
// 假如android9以上手机又使用了今日头条适配方案而且开发者选项里开启了刘海屏,那样两种方式获得density有可能不一样,
// 所以通过densityTwo / densityOne来修复正确的高度
if (sizeTwo >= sizeOne &&
!(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q && !key.equals("status_bar_height"))) {
result = sizeTwo;
} else {
float densityOne = context.getResources().getDisplayMetrics().density;
float densityTwo = Resources.getSystem().getDisplayMetrics().density;
float f = sizeOne * densityTwo / densityOne;
result = (int) ((f >= 0) ? (f + 0.5f) : (f - 0.5f));
}
}
想问下获取状态栏高度的时候,为啥,sizeTwo>=sizeOne的时候取这个sizeTwo。
Metadata
Metadata
Assignees
Labels
No labels