虽然有大量关于 Android 传统 XML 视图中的窃听 的文档,以防止恶意应用程序与敏感信息交互,但似乎没有关于 Jetpack Compose 问题的文档。
是否有与
filterTouchesWhenObscured
等效的 @Composable
,这个问题是否在更基础的层面上得到解决,或者是否需要使用手势/触摸修饰符来实现自定义逻辑?
无法为特定的可组合项指定
filterTouchesWhenObscured
,并且根据 this 维护者评论,目前尚未计划:
在不久的将来,我们不太可能在 ComposeView 级别之外实现它。
但是你可以对用于绘制 Compose 树的
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")
}
我有一个 Activity Compose 应用程序,并创建了此辅助函数来解决此应用程序的安全问题。 在Activitie的
setContent{...}
中通过onCreate
设置Compose内容后调用该函数。
/**
* Must and can only be called after the compose content was set via onCreate
*/
fun preventTapJackingSecurityIssue() {
((findViewById<View>(android.R.id.content) as ViewGroup).getChildAt(0) as? ViewGroup?)?.filterTouchesWhenObscured = true
}