如何使用 Jetpack 撰写应用栏后退按钮

Kas*_*ath 21 android android-actionbar android-jetpack-compose

getActionBar().setDisplayHomeAsUpEnabled(true) 这是我用于普通 android AppCompatActivity 在两个或多个 Activity 之间切换的方法。有人能告诉我如何在 jetpack Compose 中执行此操作吗?

Nav*_*eed 33

另一个答案对于显示后退按钮是正确的。这是一个使用TopAppBar可组合项的小替代方案。

我也遇到了类似的问题。我想解决的主要问题是当您位于根目录或后台堆栈中没有任何内容时隐藏后退按钮,因为setDisplayHomeAsUpEnabled只要您指定了您的父级,就可以解决这个问题。
假设您正在使用带有 compose 的导航控制器,您可以执行以下操作

val navController = rememberNavController()
Scaffold(
    topBar = {
        TopAppBar(
            title = { Text(text = "app bar title") },
            navigationIcon = if (navController.previousBackStackEntry != null) {
                {
                    IconButton(onClick = { navController.navigateUp() }) {
                        Icon(
                            imageVector = Icons.Filled.ArrowBack,
                            contentDescription = "Back"
                        )
                    }
                }
            } else {
                null
            }

        )
    },
    content = {
        // Body content
    }
)
Run Code Online (Sandbox Code Playgroud)

这里的关键是当返回堆栈中没有任何内容时将navigationIcon参数设置为TopAppBarto 。null这样,当您位于根目录时,后退箭头将被隐藏,否则将显示。

  • 提供的建议仅在脚手架重组时才有效 (5认同)
  • 正如我之前的评论所指出的,所提供的建议仅在脚手架重组时才有效。要重构导航事件,您可以使用以下状态 `val currentBackStackEntry by navController.currentBackStackEntryAsState()` 我在 github 上提供了完整的示例:https://github.com/pgatti86/toolbar-demo (5认同)

Cod*_*meo 3

您可以将主要内容包装在Scaffold可组合项中,并使用topBar添加后退按钮并处理后退操作,如下所示:

 import androidx.compose.material.Scaffold
 .
 .

 Scaffold(
      topBar = {
           Row {
               Icon(
               imageVector = Icons.Filled.ArrowBack,
               contentDescription = "Back",
               modifier = Modifier
                         .padding(16.dp)
                         .clickable {
                            // Implement back action here
                          }
                   )
              }
          }
    ) {
       BodyContent()
    }
Run Code Online (Sandbox Code Playgroud)