繁体   English   中英

如何在 Jetpack Compose 中获取 Activity 的标签?

[英]How to get Activity's Label in Jetpack Compose?

在AndroidManifest.xml中,我们需要声明我们的Activity,我们可以提供一个标签,即

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

在 Jetpack Compose 中,如何获取该活动标签?

我试图从LocalContext.current获取但找不到。

@Composable
fun TopBar() {
    val context = LocalContext.current
    val title = context.getActivity().getTitle() // Wrong API... not there
    TopAppBar(
        title = { Text(text = title, fontSize = 18.sp) },
        backgroundColor = MaterialTheme.colors.primary,
        contentColor = Color.White
    )
}


为 AndroidManifest.xml 中的 Activity 提供的标签通常可以通过PackageManager.getActivityInfo(...)访问。

由于您无论如何都在使用 Compose,所以这里有一个 Kotlin 风格的扩展函数

inline fun <reified T> Context.getActivityLabel(): String {
    val componentName = ComponentName(this, T::class.java)
    val activityInfo = packageManager.getActivityInfo(componentName, 0)
    // loadLabel takes care of cases when the label is specified as a String literal 
    // as well as cases when the label is specified as a String resource
    return activityInfo.loadLabel(packageManager).toString()
}

在 Composable 中使用

val context = LocalContext.current
val title = context.getActivityLabel<MyActivityClass>()

在别处使用

val context: Context = //...
val title = context.getActivityLabel<MyActivityClass>()

我通过以下方法得到了它

@Composable
fun TopBar() {
    val activity = LocalContext.current as Activity
    val title = activity.title?.toString() ?: "No Title"
    TopAppBar(
        title = { Text(text = title, fontSize = 18.sp) },
        backgroundColor = MaterialTheme.colors.primary,
        contentColor = Color.White
    )
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM