【问题标题】:Checking the version in the Camera检查相机中的版本
【发布时间】:2021-12-22 04:10:12
【问题描述】:

我需要使用低于 28 的 Camera 版本,我该如何在 else {} 中写这个?
例如,我需要 21 及以上版本

@RequiresApi(Build.VERSION_CODES.P)

有趣的 View.padWithDisplayCutout() {

fun doPadding(cutout: DisplayCutout) = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
    setPadding(
        cutout.safeInsetLeft,
        cutout.safeInsetTop,
        cutout.safeInsetRight,
        cutout.safeInsetBottom
    )
} else {
     ?????????????????????????????????????????
}

rootWindowInsets?.displayCutout?.let { doPadding(it) }

setOnApplyWindowInsetsListener { _, insets ->
    insets.displayCutout?.let { doPadding(it) }
    insets
}

}

【问题讨论】:

    标签: java android kotlin camera version


    【解决方案1】:

    DisplayCutout 是在 API lvl 28 中引入的,此类在较低的 Android 版本上无法实现,因为这些版本不支持显示切口,因此您可能应该删除 else{...},它无论如何都不会操作

    事实上,您的 doPadding 方法不会在较低的系统版本上被调用,因为您正在调用它

    insets.displayCutout?.let { doPadding(it) }
    

    或

    rootWindowInsets?.displayCutout?.let { doPadding(it) }
    

    在较低的 Android 上 displayCutout 将始终为 null 并且 let 不会执行

    【讨论】:

    • 您确定rootWindowInsets?.displayCutout? 实际上是null 吗?我希望它会在 Android 上引发异常
    • 非常感谢!
    • @Ivo Beckers - 现在我不放心,值得一试...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 2014-10-11
    • 2011-07-08
    • 1970-01-01
    • 2018-12-16
    • 2010-12-30
    相关资源
    最近更新 更多