当前位置: 首页 > 知识库问答 >
问题:

喷气背包撰写 - 为什么按钮颜色没有生效?

葛兴发
2023-03-14

我将我的按钮定义为这样的可组合按钮:

@Composable
fun PrimaryButton(modifier: Modifier = Modifier, onClick: Callback, content: @Composable RowScope.() -> Unit) {
    val buttonColors = ButtonDefaults.buttonColors(
        backgroundColor = MaterialTheme.colors.primary,
        contentColor = contentColorFor(backgroundColor = MaterialTheme.colors.primary)
    )
    Button(modifier=modifier, onClick = onClick, content=content, colors=buttonColors)
}

我已经检查了调试器,contentColorFor返回合适的颜色(白色)(0xFFFFFFFF)

但是我不能让按钮上的文字变成白色。

这是预览

@Preview(name="Buttons")
@Composable
fun PrimaryButtonPreview() {
    MyAppTheme {
        Row {
            PrimaryButton(modifier = Modifier, onClick={}) {
                Text(text = "Sample")
            }
        }
    }
}

设置按钮=TextStyle(...)会导致文本颜色的变化,但我想从按钮颜色设置它,而不是为文本设置一种唯一的颜色

将按钮的文本样式颜色设置为未指定后,它仍然不起作用:

形状是Android Studio项目生成器的默认形状

颜色

val mainBrown = Color(0xFFB4A996)
val primaryBrown = Color(0xFFC2A686)
val clearBrown = Color(0xFFAE967A)
val white = Color.White
val smokeWhite = Color(0xFFF3F3F3)
val gray = Color(0xFF9AA5AF)
val lightGray =Color(0xFFF1F1EF)
val darkGray = Color(0xFF4D5151)
val black = Color(0xFF4D4646)

val red = Color(248,113,113)

主题

private val LightColorPalette = darkColors(
    primary = primaryBrown,
    onPrimary = white,
    primaryVariant = primaryBrown, 

    secondary = white,
    onSecondary = primaryBrown,
    secondaryVariant = white, 
    background = darkGray,

    surface = lightGray,
    onSurface = black,

    error = red,
    onError = smokeWhite,
)

@Composable
fun MyAppTheme(
    darkTheme: Boolean = isSystemInDarkTheme(),
    content: @Composable () -> Unit
) {

    MaterialTheme(
        colors = LightColorPalette,
        typography = typography,
        shapes = Shapes,
        content = content
    )
}

排印

kotlin prettyprint-override">val typography = Typography(
    h1 = TextStyle(
        color = mainBrown,
        fontWeight = FontWeight.W700,
        fontSize = 1.5f.rem,
        lineHeight = 2.rem,
    ),
    h2 = TextStyle(
        color = mainBrown,
        fontWeight = FontWeight.W500,
        fontSize = 1.25f.rem,
        lineHeight = 1.75f.rem
    ),
    h3 = TextStyle(
        color = mainBrown,
        fontWeight = FontWeight.Normal,
        fontSize = 1.5f.rem,
        lineHeight = 2.rem
    ),
    h4 = TextStyle(
        color = mainBrown,
        fontWeight = FontWeight.Normal,
        fontSize = 1.25f.rem,
        lineHeight = 1.75f.rem
    ),
    body1 = TextStyle(
        color = black,
        fontSize = 1.rem,
        lineHeight = 1.25f.rem
    ),
    button = TextStyle(
        fontSize = 1.rem,
        color = Color.Unspecified,
        lineHeight = 1.25f.rem
    ),
    defaultFontFamily = ralewayRegular
)

共有1个答案

谯志诚
2023-03-14

除了排版之外,我的设置很好。

我每次都设置颜色,以便从MaterialTheme中接管它的外观。

不要设置这些值,让框架为您处理。

不工作,因为我正在将mainBrown设置为颜色

val typography = Typography(
    h1 = TextStyle(
        color = mainBrown,
        fontWeight = FontWeight.W700,
        fontSize = 1.5f.rem,
        lineHeight = 2.rem,
    ),
    h2 = TextStyle(
        color = mainBrown,
        fontWeight = FontWeight.W500,
        fontSize = 1.25f.rem,
        lineHeight = 1.75f.rem
    ),
    h3 = TextStyle(
        color = mainBrown,
        fontWeight = FontWeight.Normal,
        fontSize = 1.5f.rem,
        lineHeight = 2.rem
    ),
    h4 = TextStyle(
        color = mainBrown,
        fontWeight = FontWeight.Normal,
        fontSize = 1.25f.rem,
        lineHeight = 1.75f.rem
    ),
    body1 = TextStyle(
        color = black,
        fontSize = 1.rem,
        lineHeight = 1.25f.rem
    ),
    button = TextStyle(
        fontSize = 1.rem,
        color = Color.Unspecified,
        lineHeight = 1.25f.rem
    ),
    defaultFontFamily = ralewayRegular
)

工作

val typography = Typography(
    h1 = TextStyle(
        fontWeight = FontWeight.W700,
        fontSize = 1.5f.rem,
        lineHeight = 2.rem,
    ),
    h2 = TextStyle(
        fontWeight = FontWeight.W500,
        fontSize = 1.25f.rem,
        lineHeight = 1.75f.rem
    ),
    h3 = TextStyle(
        fontWeight = FontWeight.Normal,
        fontSize = 1.5f.rem,
        lineHeight = 2.rem
    ),
    h4 = TextStyle(
        fontWeight = FontWeight.Normal,
        fontSize = 1.25f.rem,
        lineHeight = 1.75f.rem
    ),
    body1 = TextStyle(
        fontSize = 1.rem,
        lineHeight = 1.25f.rem
    ),
    button = TextStyle(
        
        fontSize = 1.rem,
        color = Color.Unspecified,
        lineHeight = 1.25f.rem
    ),
    defaultFontFamily = ralewayRegular
)
 类似资料:
  • 我是jetpack compose的新手,从< code>JetpackCompose基础代码中学习它,所以我在创建一个高性能的懒惰列表中找到了它 注意:LazyColumn不会像那样回收其子项。当您滚动浏览它时,它会发出新的,并且仍然具有高性能,因为与实例化Android视图相比,发出相对便宜。 因此,发出新的可组合项是多么的便宜和高效,那么为什么不使用列并一次性组合整个列表,而不是在滚动时不断

  • 以下是 BottomNav 实现的概述。该应用程序正确显示底部导航栏,但当选择某个项目时,它会多次调用NavHost。我看到Jetpack撰写样本 https://github.com/android/compose-samples/tree/main/Jetsnack 一个类似的问题。是否有任何解决方法可以避免多次Navhost调用?

  • 我刚刚开始使用Jetpack作曲工具包。我添加了和一个设置 作为参数,它工作得非常好。但是每次我添加或更改某些内容时,它本身都不会自动刷新,因此我必须手动执行此操作。

  • 我想知道什么是喷气背包中的脚手架组成一个BottomAppBar示例任何人都可以帮我

  • 我对改变晶圆厂的背景色有一个问题,似乎晶圆厂后面有另一个背景 这是我的代码 现在唯一有效的解决方案是改变我的应用程序上的颜色口音,但它会影响其他UI元素

  • 我已将边框颜色设置为button border,但当我单击它时,button不显示该颜色。它正呈现出另一种颜色。我该怎么修好它? 我需要另一个帮助。我如何设置按钮背景像下面的图像?(其实不知道叫什么) 我设计的按钮: 我要设计的按钮: 还有为什么副标题不在一行?为什么要转到另一条新线路? null null