kotlin 更改Jetpack合成中列中子元素的对齐方式

9jyewag0  于 2022-11-25  发布在  Kotlin
关注(0)|答案(1)|浏览(139)

我想更改特定子节点的horizontalAlignment,其余子节点将使用相同的horizontalAlignment。这在Column中可行吗?
例如,Column父修饰符使用horizontalAlignment = Alignment.CenterHorizontally,,而我希望特定子修饰符将是不同horizontalAlignment

Column(
            modifier = Modifier
                .padding(16.dp)
                .fillMaxSize()
                .verticalScroll(rememberScrollState()),
            horizontalAlignment = Alignment.CenterHorizontally,
        ) {
            ScreenImage()
            Description()
            if (viewModel.isBluetoothEnabled) {
                ScanDeviceList(scanDeviceList)
            } else {
                Warning()
                Spacer(modifier = Modifier.weight(1f))
                TryAgainButtonView { tryAgainAction() }
                ButtonView { openSettingAction() }
            }
        }

我想将ScanDeviceList()更改为不同的horizontalAlignment

@Composable
fun ColumnScope.ScanDeviceList(scanDeviceList: List<ScanResult>) {
    Spacer(modifier = Modifier.height(20.dp))
    AnimatedVisibility(scanDeviceList.isNotEmpty()) {
        Text(
            text = stringResource(R.string.vailable_device),
        )
    }
}

非常感谢

drnojrws

drnojrws1#

你可以使用Modifier.align(Alignment.Start)来对齐一个特定的子元素。例如,要使你的ScanDeviceList()位于列的开头,代码将如下所示:

@Composable
fun ColumnScope.ScanDeviceList(scanDeviceList: List<ScanResult>) {
    Spacer(modifier = Modifier.height(20.dp))
    AnimatedVisibility(
        scanDeviceList.isNotEmpty(),
        modifier = Modifier.align(Alignment.Start)
    ) {
        Text(
            text = stringResource(R.string.vailable_device),
        )
    }
}

你也可以把修饰符作为一个参数传递给ScanDeviceList可组合函数以使它更通用,代码将是这样的:

@Composable
fun ColumnScope.ScanDeviceList(
    scanDeviceList: List<ScanResult>, 
    modifier: Modifier = Modifier
) {
    Spacer(modifier = Modifier.height(20.dp))
    AnimatedVisibility(
        scanDeviceList.isNotEmpty(), 
        modifier = modifier
    ) {
        Text(
            text = stringResource(R.string.vailable_device),
        )
    }
}

当您呼叫它时,您可以指定您想要的对齐方式:

ScanDeviceList(scanDeviceList, modifier = Modifier.align(Alignment.Start))

**注意:**将修饰符添加到可组合函数的参数中被认为是最佳做法,因为这样可以使函数像上面的示例一样可重用。您可以使用Alignment.Start或Alignment.End调用ScanDeviceList,而无需更改函数本身,只需将不同的修饰符作为参数传递即可。

相关问题