[英]How to get Jetpack Compose's LazyGrid to render behind system bars?
[英]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.