You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Jetpack Compose中获取Activity配置的Label值?

Jetpack Compose 读取 Manifest 中配置的 Activity Label

问题场景

在AndroidManifest.xml声明Activity时,通常会通过android:label属性指定Activity的展示名称,配置示例:

<activity android:name="MyActivityClass"
            android:label="Activity Label" />

在Jetpack Compose开发中,很多人会尝试直接通过LocalContext.current调用Activity的getTitle()方法拿这个值,会发现找不到对应API,典型错误写法:

@Composable
fun TopBar() {
    val context = LocalContext.current
    val title = context.getActivity().getTitle() // 错误:不存在该API
    TopAppBar(
        title = { Text(text = title, fontSize = 18.sp) },
        backgroundColor = MaterialTheme.colors.primary,
        contentColor = Color.White
    )
}

正确实现

直接从当前Context持有的Activity组件信息中读取label即可,完整可运行代码:

@Composable
fun TopBar() {
    val context = LocalContext.current
    val title = remember(context) {
        val activityInfo = (context as? ComponentActivity)?.componentInfo
        activityInfo?.loadLabel(context.packageManager)?.toString().orEmpty()
    }

    TopAppBar(
        title = { Text(text = title, fontSize = 18.sp) },
        backgroundColor = MaterialTheme.colors.primary,
        contentColor = Color.White
    )
}

要点说明

  • Compose中LocalContext.current拿到的默认就是宿主ComponentActivity的上下文,强转后可直接获取componentInfo对象,对应Manifest中声明的Activity全量配置
  • 调用loadLabel()方法会自动兼容两种label配置场景:直接写硬编码字符串、或者引用@string/xxx资源,无需手动做资源解析
  • 外层套remember做值缓存,避免每次重组都重复执行解析逻辑
  • 空安全判断可以兼容Compose预览、非Activity上下文等边界场景,避免空指针崩溃

如果需要在多个页面复用,可以抽成通用的Compose方法:

@Composable
fun rememberActivityLabel(): String {
    val context = LocalContext.current
    return remember {
        val activityInfo = (context as? ComponentActivity)?.componentInfo
        activityInfo?.loadLabel(context.packageManager)?.toString().orEmpty()
    }
}

使用时直接在Composable中调用val title = rememberActivityLabel()即可。


内容的提问来源于stack exchange,提问作者Elye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 00:12:17