虽然有大量关于Tapjacking in tradition XML views in Android的文档可以防止恶意应用程序与敏感信息交互,但对于Jetpack Compose来说,似乎没有相关的文档.

@Composables是否有filterTouchesWhenObscured的等效值,这个问题是在更基础的层面上解决的,还是需要使用手势/touch 修改器来实现自定义逻辑?

推荐答案

无法为特定的可组合性指定filterTouchesWhenObscured,根据this名维护人员的 comments ,目前还没有计划:

在不久的将来,我们不太可能在ComposeView级别之外实现它.

但你可以用ComposableView美元来画合成树.例如,如果要在屏幕上显示某个特定视图时将其应用于整个屏幕,可以按如下方式执行:

val composeView = LocalView.current

DisposableEffect(Unit) {
    composeView.filterTouchesWhenObscured = true
    onDispose {
        composeView.filterTouchesWhenObscured = false
    }
}

或者,如果您想将其应用于特定的可组合性,例如仅应用于屏幕的一部分,您可以使用这样的包装器:

@Composable
fun ObscuredView(
    content: @Composable () -> Unit,
) {
    AndroidView(
        factory = {
            ComposeView(it).apply {
                filterTouchesWhenObscured = true
            }
        },
        update = {
            it.setContent(content)
        }
    )
}

用法:

ObscuredView {
    Text("this text is Obscured")
}

Android相关问答推荐

无法安装后重新编译android代码'

使用Retrofit2的API调用:我如何能够一直进行API调用,以更新数据而无需重新打开应用程序

BroadCastReceiver的onReceive方法中的Intent上的Extras为空

Kotlin Android VS Kotlin多平台

从我的 Android 应用程序发送到 Gin 时失败,但从 Postman 发送到 Gin 时成功

如何在C++中使用JNI_GetCreatedJavaVMs调用Java代码

Android Studio Relay插件(版本0.3.07)错误

同样的参数值下,为什么requiredSizeIn不等于requiredWidthIn + requiredHeightIn?

当我想使用例如 material3 时,为什么我需要添加对 material 的依赖?底部导航?

任务 ':app:kaptGenerateStubsDebugKotlin' 执行失败

判断 AAR 元数据时发现 Android 问题:androidx.core:core:1.12.0-alpha01 和 androidx.core:core-ktx:1.12.0-alpha01

系统导航栏在某些场景下应用了深色效果

如何在 Jetpack Compose 中创建无限pager

视觉转换后获取文本

Jetpack Compose Alignment - 误解了 alignBy 修饰符

删除项目时延迟列不更新

在开发过程中我应该把 mp4 文件放在哪里?

Android 应用程序在启动时自动启动

AlertDialog android studio

Android Room Database:如何处理实体中的 Arraylist?