kotlin 喷气背包组合:删除对话框的背景(Android)

w8rqjzmb  于 2022-11-25  发布在  Kotlin
关注(0)|答案(3)|浏览(218)

我有以下代码片段,用于显示Android上Jetpack Compose中包含一些文本的简单对话框:

Dialog(onDismissRequest = { showDialog.value = false }) {
        Text(
            text = "Hello",
            color = Color.Black,
            fontSize = 24.sp,
            modifier = Modifier
                .background(
                    color = Color.Green,
                    shape = RoundedCornerShape(size = 16.dp)
                )
                .padding(8.dp)
        )
    }

它将生成以下输出:

现在棘手的部分开始了:当迷人的绿色圆形和黑色文字被定义时,边缘的白色背景就不是了。那么这个白色背景是从哪里来的呢?
整个可组合屏幕本身在其他地方被 Package 成一个自定义主题。我已经将每个主题颜色替换为不同的颜色,以检查对话框的背景是否有变化。
我还尝试将对话框本身 Package 在第二个主题中,以覆盖所有其他颜色,但也没有成功。
注意:当我定义一个没有任何样式的可组合的原始文本时,白色背景也在那里,所以它似乎是对话框的某种标准背景。
目的是移除白色背景颜色或将其替换为透明颜色,以便在变暗的背景上仅显示圆形。

z6psavjg

z6psavjg1#

感谢每个人提供有用的输入,最后我的代码在不同的项目设置中工作正常的信息让我从不同的方向思考。
所以我试着把我的代码移到主题定义的一些层之外。没有其他结果。
但后来我想到我有一个混合项目,其中包含了Compose和良好的旧视图实现,因此也有一些xml样式。
深入研究一下compose androidx.compose.ui.window.Dialog,可以看到在DialogWrapper中有一个R.style.DialogWindowTheme的调用。我不是100%肯定,但是我假设我自己的xml定义覆盖了这个样式的一些属性,并且影响了compose对话框的外观。
所以,如果你也有类似的麻烦,像我一样,检查以下:

  • 您是否在同一个项目中使用xml样式和compose?
  • 你是否为对话框创建了一个样式,并在主题中覆盖了dialogTheme

<item name="android:dialogTheme">@style/AppTheme.SomeDialogStyles</item>

  • 然后请检查是否设置了自定义背景色

<item name="android:background">@color/some_color</item>
我的问题的解决方案是删除android:background属性。现在我正在冒烟测试所有现有的对话框,如果这有一些负面影响,但我的问题与白色背景的组成对话框解决了!

yvt65v4c

yvt65v4c2#

试试看:

Dialog(
    onDismissRequest = {

    }
) {
    Column(modifier = Modifier.background(color = Color.Transparent)) {
        Text(
            text = "Hello",
            color = Color.Black,
            fontSize = 24.sp,
            modifier = Modifier
                .background(
                    color = Color.Green,
                    shape = RoundedCornerShape(size = 16.dp)
                )
                .padding(8.dp)
        )
    }
}
6uxekuva

6uxekuva3#

我尝试使用对话框,但无法清除标志WindowManager.布局参数.FLAG_DIM_BEHIND
你可以试着用Popup来代替Dialog,一切都很好。

Popup(
        onDismissRequest = {},
        properties = PopupProperties(
            focusable = true,
            dismissOnBackPress = false,
            dismissOnClickOutside = false,
            excludeFromSystemGesture = true,
        )
    ) {
        Box(
            contentAlignment = Alignment.Center,
            modifier = Modifier
                .fillMaxSize()
                .background(Color.Transparent)
        ) {
            // Your content code is here
        }
    }

相关问题