簡體   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