如何禁用TopAppBar的navigationIcon和actions隐藏paddings?

问题描述 投票:0回答:1

enter image description here

有谁知道如何删除 navigationIcon 中的填充和 TopAppBar 中的操作?代码中没有填充,谁知道它们来自哪里。黄色 - TopAppBar,红色 - 导航图标和操作。为 TopAppBar 尝试了所有 windowInsets 0.dp ,但不起作用。我说的是黄色和红色之间的填充。

@Composable
fun RootScaffold(
    content: @Composable () -> Unit,
    screenTitle: String,
    topBarMenuChar: Char,
    floatingActionButton: @Composable () -> Unit? = {}
) {
    val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed)
    ModalNavigationDrawer(
        drawerState = drawerState,
        drawerContent = {
            ModalDrawerSheet { /* Drawer content */ }
        },
    ) {
        Box(
            modifier = Modifier
                .fillMaxSize()
                .background(Color.Black)
                .paint(
                    painterResource(R.drawable.bg_app),
                    contentScale = ContentScale.Crop,
                    alpha = 0.12F
                )
                .background(MaterialTheme.colorScheme.secondary.copy(alpha = 0.12F))
                .padding(horizontal = 20.dp)
        ) {
            Scaffold(
                containerColor = Color.Transparent,
                topBar = { RootTopAppBar(screenTitle, topBarMenuChar) },
                floatingActionButton = { floatingActionButton() }
            ) { paddingValues ->
                Box(
                    modifier = Modifier
                        .padding(paddingValues)
                ) {
                    content()
                }
            }
        }
    }
}
 
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun RootTopAppBar(title: String, menuChar: Char) {
    val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
 
    TopAppBar(
        colors = topAppBarColors(
            containerColor = Color.Yellow
        ),
        title = {
            Text(
                modifier = Modifier.padding(start = 12.dp).background(Color.Blue),
                text = title
            )
        },
        navigationIcon = {
            Box(
                modifier = Modifier
                    .size(31.dp)
                    .border(1.dp, MaterialTheme.colorScheme.onPrimary, CircleShape).background(Color.Red),
                contentAlignment = Alignment.Center
            ) {
                Text(
                    text = "$menuChar",
                    fontWeight = FontWeight.Bold
                )
            }
        },
        actions = {
                Icon(
                    modifier = Modifier.background(Color.Red),
                    painter = painterResource(R.drawable.ic_plus),
                    contentDescription = "Localized description"
                )
        },
        scrollBehavior = scrollBehavior,
    )
}
android kotlin android-studio android-jetpack-compose
1个回答
0
投票

TopAppBar 使用 private val AppBarHorizontalPadding = 4.dp,它是一个无法更改的常量。两种解决方案:

如果您的 TopAppBar 没有任何水平填充,那么您应该创建一个自定义 TopAppBar 如果您的 TopAppBar 有任何水平内边距,只需将它们减少 4.dp 即可。

© www.soinside.com 2019 - 2024. All rights reserved.