Sac*_*tap 12
如果您打算支持所有操作系统,则某些奥利奥设备也会显示槽口,那么您可以使用我的解决方案。根据材料设计指南,Android设备的状态栏高度为24dp。您可以使用以下方法获取设备状态栏的高度和设备密度,并检查状态栏的高度是否大于24dp。如果其高度大于24dp,则显示为缺口,然后您可以根据需要处理视图位置。这也将适用于Oreo。
int statusBarHeight = 0;
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
    statusBarHeight = getResources().getDimensionPixelSize(resourceId);
}
// DP至像素
public static int convertDpToPixel ( float dp){
    DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
    float px = dp * (metrics.densityDpi / 160f);
    return Math.round(px);
}
//根据您的要求进行UI调整
if (statusBarHeight > convertDpToPixel(24)) {
    RelativeLayout.LayoutParams topbarLp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
    topbarlp.setMargins(0, statusBarHeight, 0, 0);
    //Set above layout params to your layout which was getting cut because of notch
    topbar.setLayoutParams(topbarlp)
}
您需要使用WindowInsets对象的getDisplayCutout方法。这将为您提供一个DisplayCutout对象,您可以查询该对象以查找显示中的“安全”插图。
DisplayCutout 类是 API 级别 28 中的新类,因此您将无法在 API 级别较低的设备上执行此操作(您可以假设没有缺口,除非 API 级别 >= 28)。
这里有一个指南。
您可以通过重写View 的onApplyWindowInsets方法或实现OnApplyWindowInsetsListener类来获取 WindowInsets 对象。
| 归档时间: | 
 | 
| 查看次数: | 9398 次 | 
| 最近记录: |