首页 > 其他分享 >Android开发 Jetpack Compose Button

Android开发 Jetpack Compose Button

时间:2023-08-04 12:14:46浏览次数:41  
标签:Compose buttonColors Color Jetpack Button 点击 按键 Android interactionSource

前言

  此篇博客讲解Button按钮

一个简单的例子

快速了解一下

效果图

代码

@Composable
fun APage() {
    Column(
        Modifier.fillMaxSize(),
        horizontalAlignment = Alignment.CenterHorizontally,
        verticalArrangement = Arrangement.Center
    ) {
        Button(onClick = {
            //点击回调
            Toast.makeText(this@DemoActivity, "点击按钮", Toast.LENGTH_SHORT).show()
        }) {
            //单单一个Button是没有内容的,这里需要在Button里添加一个Text
            Text(text = "点击")
        }
    }
}

参数详解

@OptIn(ExperimentalMaterialApi::class)
@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            //Button这个父类容器的内容,注意它是横向的
)

设置按键启用状态与按键背景颜色

效果图

代码

@Composable
fun APage() {
    //启用状态
    val isEnabled = remember {
        mutableStateOf(true)
    }
    //按键颜色
    val buttonColors = ButtonDefaults.buttonColors(
        backgroundColor = Color.Red, //背景颜色
        contentColor = Color.Yellow, //内容颜色
        disabledBackgroundColor = Color.DarkGray,  //未启用按键背景色
        disabledContentColor = Color.Black   //未启用按键内容色
    )
    Column(
        Modifier.fillMaxSize(),
        horizontalAlignment = Alignment.CenterHorizontally,
        verticalArrangement = Arrangement.Center
    ) {
        Button(onClick = {
            Toast.makeText(this@DemoActivity, "点击", Toast.LENGTH_SHORT).show()
        }, enabled = isEnabled.value, colors = buttonColors) {
            Text(text = "点击")
        }
        Button(onClick = { isEnabled.value = !isEnabled.value }) {
            Text(text = "设置上面的按键是否启用")
        }
    }
}

按键状态(按下效果实现)

效果图

代码

@Composable
fun APage() {
    //点击状态来源
    val interactionSource =  remember { MutableInteractionSource() }
    //interactionSource.collectIsPressedAsState() 为按下状态
    //interactionSource.collectIsFocusedAsState() 为焦点选中状态
    //interactionSource.collectIsHoveredAsState() 为鼠标悬停状态
    //interactionSource.collectIsDraggedAsState() 为拖动状态

    val buttonColors = if (interactionSource.collectIsPressedAsState().value) {
        ButtonDefaults.buttonColors(
            backgroundColor = Color.Gray, //背景颜色
            contentColor = Color.White, //内容颜色
        )
    } else {
        ButtonDefaults.buttonColors(
            backgroundColor = Color.Cyan, //背景颜色
            contentColor = Color.Black, //内容颜色
        )
    }
    Column(
        Modifier.fillMaxSize(),
        horizontalAlignment = Alignment.CenterHorizontally,
        verticalArrangement = Arrangement.Center
    ) {
        Button(onClick = {
            Toast.makeText(this@DemoActivity, "点击", Toast.LENGTH_SHORT).show()
        }, colors = buttonColors, interactionSource = interactionSource) {
            Text(text = "点击")
        }
    }
}

 

 

end

标签:Compose,buttonColors,Color,Jetpack,Button,点击,按键,Android,interactionSource
From: https://www.cnblogs.com/guanxinjing/p/17603239.html

相关文章

  • Android布局容器&视图元素
    1.界面布局简介在Android中,界面布局是指如何组织和排列用户界面中的视图(View)元素,以形成用户所看到的界面。Android提供了多种布局容器(LayoutContainer)和视图元素(ViewElement),用于实现各种不同类型的用户界面。常用的Android界面布局容器有以下几种:LinearLayout:线性布局容器,......
  • Android Dex文件详解
    前言==相信大家都熟悉dex文件,把一个apk给解压缩,就会得到一堆dex文件,但是这些dex文件是怎么来的,又有什么用,为什么这样设计,有进行思考过吗俗话说知其然,知其所以然,本篇文章开始探究一下这些底层实现细节。正文==不同的虚拟机JVMJVM是JavaVirtualMachine的简称,即Java虚拟机,它本质是......
  • Android 打印调用栈的方法
    转载1.Java层调用栈打印:(1)打印本地调用堆栈Log.i(TAG,Log.getStackTraceString(newThrowable()));//打印本地调用堆栈(2)打印远程调用堆栈importandroid.os.Binder;importandroid.app.IActivityManager;importandroid.util.Log;StringprocessName="";intpid=......
  • 【金九银十面试冲刺】Android岗面试题每日分享
    已经进入八月份了,我看到了许多朋友在焦急的准备“金九银十”跳槽面试,甚至很多即将毕业的大学生都在备战秋招,对于学历还算优秀的大学生来说,这是一次离大厂最近的机会,毕竟是应届毕业生,不会对技术有非常严格的要求。而对于工作了一两年的Android开发朋友来说,这段时间加强技术能力,多掌......
  • Android平台如何实时叠加电量信息和设备信号状态到GB28181接入端
    技术背景我们在Android平台实现GB28181设备接入,把摄像头和麦克风数据,采集过去,用于移动单兵、智能车载、智慧安防、智能家居、工业仿真等行业时,发现大多场景对视频水印的要求越来越高,从之前的固定位置静态文字水印、png水印等慢慢过渡到动态水印需求。本文,我们要探讨的是,除了常规的......
  • Rust交叉编译为Android库
    Rust目前在互联网上资料较少,经过几天的折腾,终于在Windows10和GithubActions(Ubuntu)上构建出了armv7和armv8的.so文件。关于JNI的配置见:【Rust实现JNI】https://juejin.cn/post/7092750468631740452交叉编译需要AndroidNDK,我目前使用的是android-ndk-r25c......
  • Android中的颜色设置
    1、在android中经常看到设置的颜色为八位的十六进制的颜色值,例如:publicstaticfinalclasscolor{publicstaticfinalintlightblue=0x7f040000......
  • android调用javascript传多个参数
    Stringparam1="Hello";Stringparam2="World";Stringscript="yourJavaScriptFunction('"+param1+"','"+param2+"');";webView.loadUrl("javascript:"+"yourJava......
  • 采用ComposeUI实现Android插件化
    什么是ComposeJetpackCompose是谷歌官方推荐的AndroidUI实现方式,避免了Android传统View在绘制、编写、性能等方面的种种缺点,具体使用方法请参考官方文档。Compose与插件化想必大家都接触过或者了解过插件化开发,没接触过的小伙伴们要补补课啦。在以往插件化开发过程中,清单文件中要......
  • Android学习笔记(三十):弹出信息-Toast和告警
    Android提供两个常用的消息弹出框,Toast和Alert。ToastToast是一种短暂的提示框,并不需要用户交互,也不会将focus移过来,因此可以适合大多数的场景,向用户进行信息提示。在之前的学习中,已经多次使用到Toast了。创建一个Toast很简单,使用静态方法makeText(Contextcontext,CharSequencet......