当前位置:网站首页>Jetpack Compose——Button(按钮)的使用

Jetpack Compose——Button(按钮)的使用

2022-08-09 13:12:00 lplj717

Button这个组件,官方已经实现了Material Design的效果,一般来说我们直接使用这个即可,另外官方也是给我们封装了不同类型的Button,分别为IconButton、TextButton、OutlinedButton、IconToggleButton

先来看一下简单的使用效果:

       Button(onClick = { println("点击了按钮") }) {
            Icon(Icons.Default.Search, contentDescription = null)
            Text(text = "测试")
        }

由此可以看到Button中的content内容Icon和Text是按照水平方式排列的(可以认为是Row)

Button构造参数:(简单的直接看注释,对于复杂的做一些介绍)

@Composable
fun Button(
    onClick: () -> Unit,//点击事件响应
    modifier: Modifier = Modifier,//修饰符(后面再研究)
    enabled: Boolean = true,//按钮是否可用
    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },//状态变化
    elevation: ButtonElevation? = ButtonDefaults.elevation(),//阴影
    shape: Shape = MaterialTheme.shapes.small,//形状
    border: BorderStroke? = null,//边框
    colors: ButtonColors = ButtonDefaults.buttonColors(),// 颜色
    contentPadding: PaddingValues = ButtonDefaults.ContentPadding,//内容内边距
    content: @Composable RowScope.() -> Unit//内容
)

modifier的基本属性介绍请参看:Modifier的基本属性简单介绍

1.elevation 阴影
Button的阴影参数是有有默认值的,我们也可以修改
ButtonDefaults.elevation(defaultElevation,pressedElevation,disabledElevation,hoveredElevation,focusedElevation)
defaultElevation表示默认的阴影
pressedElevation表示按下时的阴影
disabledElevation表示未启用时候的阴影
hoveredElevation表示按钮启用并悬停时要使用的高程
focusedElevation表示按钮启用并聚焦时使用的高程

        Button(
            onClick = { println("点击了按钮") },
            elevation = ButtonDefaults.elevation(4.dp, 10.dp, 0.dp)
        ) {
            Text(text = "阴影")
        }
        Spacer(modifier = Modifier.height(10.dp))
        Button(
            onClick = { println("点击了按钮") },
            elevation = ButtonDefaults.elevation(0.dp),
            enabled = false
        ) {
            Text(text = "禁用状态")
        }

2.shape 形状
Android官方给我们提供了以下四种形状


RoundedCornerShape 圆角形状
CutCornerShape 切角形状
AbsoluteRoundedCornerShape 绝对圆角形状
AbsoluteCutCornerShape 绝对切角形状


RoundedCornerShape和AbsoluteRoundedCornerShape在属性赋值时的属性名不一样之外,视觉上没有差别

            Button(
                onClick = { println("点击了按钮") },
                shape = RoundedCornerShape(//圆角
                    topStart = 10.dp,
                    topEnd = 10.dp,
                    bottomStart = 10.dp,
                    bottomEnd = 10.dp
                )
            ) {
                Text(text = "圆角")
            }
            Spacer(modifier = Modifier.width(10.dp))
            Button(
                onClick = { println("点击了按钮") },
                shape = AbsoluteRoundedCornerShape(//圆角
                    topLeft = 10.dp,
                    topRight = 10.dp,
                    bottomLeft = 10.dp,
                    bottomRight = 10.dp
                )
            ) {
                Text(text = "绝对圆角")
            }
            Spacer(modifier = Modifier.width(10.dp))
            Button(
                onClick = { println("点击了按钮") },
                shape = CutCornerShape(//切角
                    topStart = 10.dp,
                    topEnd = 10.dp,
                    bottomStart = 10.dp,
                    bottomEnd = 10.dp
                )
            ) {
                Text(text = "切角")
            }
            Spacer(modifier = Modifier.width(10.dp))
            Button(
                modifier = Modifier
                    .width(50.dp)
                    .height(50.dp),
                onClick = { println("点击了按钮") },
                shape = RoundedCornerShape(50.dp)
            ) {
                Text(
                    text = "圆",
                    fontSize = 10.sp
                )
            }
            Spacer(modifier = Modifier.width(10.dp))
            Button(
                modifier = Modifier
                    .width(50.dp)
                    .height(50.dp),
                onClick = { println("点击了按钮") },
                shape = CutCornerShape(50.dp)
            ) {
                Text(
                    text = "菱",
                    fontSize = 10.sp
                )
            }

 3.border 边框
使用BorderStroke,接收两个参数,宽度及颜色

            Button(
                onClick = { println("点击了按钮") },
                shape = RoundedCornerShape(5.dp),
                border = BorderStroke(1.dp,Color.Red)
            ) {
                Text(
                    text = "边框",
                    fontSize = 10.sp
                )
            }

4.colors 颜色

backgroundColor表示设置背景颜色
contentColor 表示设置内容颜色这里比如说是登录文本的颜色
disabledBackgroundColor 表示enable等于false的时候的背景颜色
disabledContentColor 表示enable等于false时候的内容的颜色

            Button(
                onClick = {  },
                shape = RoundedCornerShape(5.dp),
                border = BorderStroke(1.dp, Color.Red),
                colors = ButtonDefaults.buttonColors(
                    backgroundColor = Color.Yellow,
                    contentColor = Color.Blue
                )
            ) {
                Text(
                    text = "颜色",
                    fontSize = 10.sp
                )
            }

5.contentPadding 内容内边距
contentPadding参数接收一个PaddingValues对象,这个对象的构造方法如下:
PaddingValues(all)  //上下左右内边距
PaddingValues(horizontal: Dp, vertical: Dp)  //水平边距,垂直边距
PaddingValues(start: Dp = 0.dp,top: Dp = 0.dp,end: Dp = 0.dp,bottom: Dp = 0.dp)  //左内边距,上内边距,右内边距,下内边距

            Button(
                onClick = {  },
                shape = RoundedCornerShape(5.dp),
                contentPadding = PaddingValues(10.dp)
            ) {
                Text(
                    text = "颜色",
                    fontSize = 10.sp
                )
            }

6.interactionSource 状态变化
这个主要是用来按钮的状态说明,类似selector的xml文件给按钮设置样式
interactionSource是一个接口,我们需要使用其的实现类MutableInteractionSource
MutableInteractionSource 中提供了三个属性用来获取状态
collectIsPressedAsState  按压状态
collectIsDraggedAsState  拖动状态
collectIsFocusedAsState  焦点状态

        val myInteractionSource = remember {
            MutableInteractionSource()
        }
        val pressState = myInteractionSource.collectIsPressedAsState()
        //如果是按压状态则是红色,否则则是蓝色
        val myShape = if (pressState.value) ButtonDefaults.buttonColors(backgroundColor = Color.Red) else ButtonDefaults.buttonColors(backgroundColor = Color.Blue)
        Button(
            onClick = {},
            //设置定义的shape
            colors = myShape,
            //设置创建的MutableInteractionSource对象
            interactionSource = myInteractionSource
        ) {
            Text(
                text = "按钮状态",
                fontSize = 10.sp
            )
        }

效果如图(需要按住才有效果)

 

 这些都是基础Button,其他的那些IconButton、TextButton、OutlinedButton、IconToggleButton后面有时间在来研究,今天就先到这里,代码路漫漫啊

原网站

版权声明
本文为[lplj717]所创,转载请带上原文链接,感谢
https://blog.csdn.net/lplj717/article/details/121857963