我对喷气背包作曲很陌生,请帮帮忙, 我使用了Surface(),但我的视图彼此重叠, 我希望单独查看,因为第一个应该是TopHeader(),另一个应该是BillForm

我的代码是:-


class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MyApp {
                //TopHeader()
                MainContent()
            }
        }
    }
}

@Composable
fun MyApp(content: @Composable () -> Unit) {

    JetTipAppTheme {
        // A surface container using the 'background' color from the theme
        Surface(color = MaterialTheme.colors.background) {
            content()
        }

    }

}

用于在给定图像中显示粉色视图的TopHeader函数


@Composable
fun TopHeader(totalPerPerson: Double = 134.0) {

    Surface(
        modifier = Modifier
            .fillMaxWidth()
            .padding(15.dp)
            .height(150.dp)
            .clip(shape = CircleShape.copy(all = CornerSize(12.dp))),
            //.clip(shape = RoundedCornerShape(corner = CornerSize(12.dp))),
        color = Color(0xFFE9D7F7)
    ) {

        Column(
            modifier = Modifier.padding(12.dp),
            horizontalAlignment = Alignment.CenterHorizontally,
            verticalArrangement = Arrangement.Center
        ) {

            val total = "%.2f".format(totalPerPerson)
            Text(
                text = "Total per person",
                style = MaterialTheme.typography.h5
            )
            Text(
                text = "$$total",
                style = MaterialTheme.typography.h4,
                fontWeight = FontWeight.ExtraBold
            )

        }

    }

}

这是MainContent函数:-


@Composable
fun MainContent() {

    BillForm(){ billAmt ->
        Log.d("AMT","MainContent: $billAmt")

    }


}

BillForm可组合函数


@Composable
fun BillForm(modifier: Modifier = Modifier,
            onValChange: (String) -> Unit = {}
             ){

    val totalBillState = remember{
        mutableStateOf("")
    }

    val validState = remember(totalBillState.value) {

        totalBillState.value.trim().isNotEmpty()

    }

    val keyboardController = LocalSoftwareKeyboardController.current

    val sliderPositionState = remember {
        mutableStateOf(0f) //slider will take position from zero
    }

    TopHeader()

    
    Surface(
        modifier = Modifier
            .padding(2.dp)
            .fillMaxWidth(),
        shape = RoundedCornerShape(corner = CornerSize(8.dp)),
        border = BorderStroke(width = 1.dp, color = Color.LightGray)
    ) {
        Column(

            modifier = Modifier.padding(6.dp),
            verticalArrangement = Arrangement.Top,
            horizontalAlignment = Alignment.Start

        ) {
            InputField(
                valueState = totalBillState,
                labelId = "Enter Bill",
                enabled = true,
                isSingleLined = true,
                onAction = KeyboardActions{

                    if (!validState)return@KeyboardActions

                    onValChange(totalBillState.value.trim())

                    keyboardController?.hide()

                }
            )

            //if(validState){

                Row(
                    modifier = Modifier.padding(3.dp),
                    horizontalArrangement = Arrangement.Start

                ) {

                    Text(text = "Split",
                        modifier = Modifier.align(
                            alignment = Alignment.CenterVertically
                        ))

                    //Spacer in between text and buttons
                    Spacer(modifier = Modifier.width(120.dp))

                    //Row for Buttons
                    Row(modifier = Modifier.padding(horizontal = 3.dp),
                        horizontalArrangement = Arrangement.End
                        ) {

                        RoundIconButton( imageVector = Icons.Default.Remove,
                            onClick = {  })

                        Text(text = "2",
                            modifier = Modifier
                                .align(Alignment.CenterVertically)
                                .padding(start = 9.dp, end = 9.dp)
                            )

                        RoundIconButton( imageVector = Icons.Default.Add,
                            onClick = {  })

                    }

                }

            //Tip Row
            Row(modifier = Modifier
                .padding(horizontal = 3.dp, vertical = 12.dp)
            ) {
              Text(text = "Tip",
                  modifier = Modifier.align(alignment = Alignment.CenterVertically))

                Spacer(modifier = Modifier.width(200.dp))

                Text(text = "$33.00",
                modifier = Modifier.align(alignment = Alignment.CenterVertically))
            }


            Column(verticalArrangement = Arrangement.Center,
                    horizontalAlignment = Alignment.CenterHorizontally
                ) {

                Text(text = "33%")

                Spacer(modifier = Modifier.height(14.dp))

                //Slider
                Slider(value = sliderPositionState.value,
                    onValueChange = { newVal ->
                        sliderPositionState.value = newVal  //<- this will change the position of the slider
                        Log.d("Slider","BillForm: $newVal")
                    },
                        modifier = Modifier.padding(start = 16.dp, end = 16.dp),
                        steps = 5,
                        onValueChangeFinished = {

                        }
                    )

            }


//            }else{
//                Box() {
//
//                }
//            }

        }
    }
}

TopHeader可组合视图:-

enter image description here

BillForm视图:

enter image description here

What I want is like this given image:-

enter image description here

推荐答案

为此,请使用Column(){} Composable.

你可以follow these basics个,这可以帮助你组织你的复合material ,并了解它是如何工作的.

Android相关问答推荐

以正确的方式从房间收集流量

如何使用Jetpack Compose使水平pager 显示离屏页面?

原因平滑滚动的滞后懒惰列在android jetpack compose

react 本机生成失败,出现异常.错误:无法确定';<;宏/>;的类型

Android从已连接的设备获得GATT

插入视图模型时,dagger 未命中绑定错误

如何隐藏OutlinedTextField边框上的提示标签

如何检测低性能 Android 设备进行条件动画渲染?

为什么我在 android 中使用 TabLayout 时无法启动我的 Activity?

块不起作用,出现 "只有安全的 (?.)... " 错误

Koin Android-KMM:我有嵌套范围但注入不起作用

当包含可绘制对象的整数变量传递给 painterResource 函数时,为什么图像不在 Android Studio 中呈现?

Jetpack Compose 动画性能问题

Material Design 网站的新设计已启动,但我找不到实现选项卡,该选项卡在哪里?

GridLayout 和 GridView 有什么好用和区别

在alert 对话框生成器中启动协程

Kotlin:如何在另一个变量的名称中插入一个变量的值

Android - 水平(从右到左)圆形背景 colored颜色 过渡

如何从构建的流对象中发出值

在delphi中将Jnet_uri转换为Tbitmap