Jetpack Compose-Card
【摘要】 Card@Composablefun Card( modifier: Modifier = Modifier, shape: Shape = MaterialTheme.shapes.medium, backgroundColor: Color = MaterialTheme.colors.surface, contentColor: Color = contentC...
@Composable
fun Card(
modifier: Modifier = Modifier,
shape: Shape = MaterialTheme.shapes.medium,
backgroundColor: Color = MaterialTheme.colors.surface,
contentColor: Color = contentColorFor(backgroundColor),
border: BorderStroke? = null,
elevation: Dp = 1.dp,
content: @Composable () -> Unit
)
Card
是 Compose 中一个布局组件,我们用它可以来创造出一些类似于卡片界面
package com.example.composestudy
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.interaction.collectIsPressedAsState
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.*
import androidx.compose.runtime.*
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.withStyle
import androidx.compose.ui.unit.dp
import com.example.composestudy.ui.theme.ComposestudyTheme
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
ComposestudyTheme {
CardDemo()
}
}
}
}
data class ButtonState(var text: String, var textColor: Color, var buttonColor: Color)
@Composable
fun ButtonDemo() {
// 获取按钮的状态
val interactionState = remember { MutableInteractionSource() }
// 使用 Kotlin 的解构方法
val (text, textColor, buttonColor) = when {
interactionState.collectIsPressedAsState().value -> ButtonState("按钮1", Color.Red, Color.Black)
else -> ButtonState( "按钮", Color.White, Color.Red)
}
Button(
onClick = { /*TODO*/ },
interactionSource = interactionState,
elevation = null,
shape = RoundedCornerShape(50),
colors = ButtonDefaults.buttonColors(
backgroundColor = buttonColor,
),
modifier = Modifier.width(IntrinsicSize.Min).height(IntrinsicSize.Min)
) {
Text(
text = text, color = textColor
)
}
}
@Composable
fun CardDemo() {
Card(
modifier = Modifier
.fillMaxWidth()
.padding(15.dp) // 外边距
.clickable{ },
// 设置点击波纹效果,注意如果 CardDemo() 函数不在 MaterialTheme 下调用
// 将无法显示波纹效果
elevation = 10.dp // 设置阴影
) {
Column(
modifier = Modifier.padding(15.dp) // 内边距
) {
Text(
buildAnnotatedString {
append("大前端之旅 ")
withStyle(style = SpanStyle(fontWeight = FontWeight.W900, color = Color(0xFF4552B8),)
) {
append("欢迎你的到来")
}
}
)
Text(
buildAnnotatedString {
append("你现在观看的是 ")
withStyle(style = SpanStyle(fontWeight = FontWeight.W900)) {
append("Card的使用方法")
}
}
)
}
}
}
@Preview(name = "Light Mode")
@Composable
fun PreviewMessageCard() {
ComposestudyTheme {
CardDemo()
}
}
更多
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)