kotlin布局交互

将 wrapContentSize() 方法链接到 Modifier 对象,然后传递 Alignment.Center 作为实参以将组件居中。Alignment.Center 会指定组件同时在水平和垂直方向上居中。
kotlin 复制代码
DiceWithButtonAndImage(modifier = Modifier
    .fillMaxSize()
    .wrapContentSize(Alignment.Center)
)

创建垂直布局 在 Compose 中,垂直布局是使用 Column() 函数创建的

请在 Image 和 Button 可组合函数之间添加一个 Spacer 可组合函数。Spacer 接受 Modifier 作为形参。在本例中,Image 在 Button 上方,因此它们之间需要一定的垂直空间。因此,可以设置 Modifier 的高度以应用于 Spacer。尝试将高度设为 16.dp。通常,dp 尺寸以 4.dp 为增量进行更改。

kotlin 复制代码
Spacer(modifier = Modifier.height(16.dp))
###

构建掷骰子逻辑

默认情况下,可组合函数是无状态的,这意味着它们不存储值,并且可随时被系统重组,从而导致值被重置。不过,Compose 提供了一种避免这种情况的便捷方式。可组合函数可以使用 remember 可组合函数将对象存储在内存中。

在 remember 可组合函数正文中,传入 mutableStateOf() 函数,然后向该函数传递 1 实参。

mutableStateOf() 函数会返回一个可观察对象。稍后,您会详细了解可观察对象,但目前这基本上意味着,当 result 变量的值变化时,系统会触发重组、反映结果值并刷新界面。
var result by remember { mutableStateOf(1) }

kotlin 复制代码
注意:import androidx.compose.runtime.mutableStateOf 和 import androidx.compose.runtime.remember 语句会导入 mutableStateOf() 函数和 remember 可组合函数所需的软件包。

如需导入必要的 State 扩展函数,还需要以下 import 语句:

import androidx.compose.runtime.getValue

import androidx.compose.runtime.setValue
kotlin 复制代码
val imageResource = when (result) {
    1 -> R.drawable.dice_1
    2 -> R.drawable.dice_2
    3 -> R.drawable.dice_3
    4 -> R.drawable.dice_4
    5 -> R.drawable.dice_5
    else -> R.drawable.dice_6
}

完整代码

kotlin 复制代码
package com.example.diceroller

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.material3.Button
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.setValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.example.diceroller.ui.theme.DiceRollerTheme

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContent {
           DiceRollerTheme {
               DiceRollerApp()
           }
        }
    }
}



@Composable
fun DiceWithButtonAndImage(modifier: Modifier = Modifier){
    var result by remember { mutableStateOf(1) }
    val imageResource = when (result) {
        1 -> R.drawable.dice_1
        2 -> R.drawable.dice_2
        3 -> R.drawable.dice_3
        4 -> R.drawable.dice_4
        5 -> R.drawable.dice_5
        else -> R.drawable.dice_6
    }
    Column (
        modifier = modifier,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Image(painterResource(imageResource),
            contentDescription = result.toString())
        Spacer(modifier = Modifier.height(16.dp))
        Button(onClick = { result = (1..6).random() }) {
            Text(stringResource(R.string.roll))
        }
    }
}

@Composable
@Preview
fun DiceRollerApp(){
    DiceWithButtonAndImage(modifier = Modifier
        .fillMaxSize()
        .wrapContentSize(Alignment.Center)
    )
}
相关推荐
互联网散修10 分钟前
鸿蒙应用开发UI基础第三十九节:触摸事件与手势交互全解 - 从基础解析到实战演示
交互·harmonyos·手势与触摸
雨白10 小时前
深入理解 Kotlin 协程 (四):大道至简,于微末的挂起恢复中衍化万物
kotlin
jinanwuhuaguo19 小时前
OpenClaw 2026年4月升级大系深度解读剖析:从“架构重塑”到“信任内建”的范式跃迁
android·开发语言·人工智能·架构·kotlin·openclaw
信也科技布道师19 小时前
把7个页面变成1段对话:AI如何重构借款流程
前端·人工智能·重构·架构·交互·用户体验
我命由我1234520 小时前
Android Jetpack Compose - SearchBar(搜索栏)、Tab(标签页)、时间选择器、TooltipBox(工具提示)
android·java·java-ee·kotlin·android studio·android jetpack·android-studio
Lsk_Smion21 小时前
Hot100(开刷) 之 长度最小的数组--删除倒数第N个链表--层序遍历
java·数据结构·算法·kotlin
manduic1 天前
昆泰芯 KTH5701 三轴霍尔传感器 如何从根源解决摇杆漂移,升级智能交互体验
人工智能·交互
我命由我123451 天前
Android Jetpack Compose - 组件分类:布局组件、交互组件、文本组件
android·java·java-ee·kotlin·android studio·android jetpack·android-studio
Kapaseker1 天前
让你的 App 成为 AI 的一环
android·kotlin
_Evan_Yao2 天前
别让“规范”困住你:前后端交互中的方法选择与认知突围
java·后端·交互·restful