我是 Jetpack 的新手,尤其是 Compose,并且正在努力找出一种通过单击位于 TopAppBar 中的 IconButton 来打开网站或启动 Chrome 浏览器的方法。我应该通过调用我可以编写的“linkToWebpage()”函数来执行此操作,还是简单地与 IconButton 的 onClick = {} 函数内联来执行此操作?我该怎么做?我正在使用导航库进行应用内导航,并取得了巨大成功,但在加载网页时遇到了困难。请注意,为了便于阅读,我省略了一些代码。感谢您的时间和帮助!
@Composable
fun HomeScreen() {
val navController = rememberNavController()
...
Scaffold(
topBar = {
TopAppBar(
title = {},
navigationIcon =
{
IconButton(onClick = { linkToWebpage() }) {
Icon(Icons.Filled.Favorite)
}
}
,
// TODO get appbar color from global theme.
backgroundColor = Color.DarkGray,
)
},
bottomBar = {
...
}
) {
NavHost(navController, startDestination = Screen.Courses.route) {
...
}
}
哇,我在这方面花了太多时间,但能够弄清楚如何启动以及从可组合函数中打开 Web 浏览器的活动。通过“linkToWebPage”函数传递上下文
val context = ContextAmbient.current
然后用 this 作为参数调用函数
IconButton(onClick = { linkToWebpage(context) }) {
Icon(Icons.Filled.Favorite)
}
然后我就可以在我编写的函数中启动活动,如下所示
fun linkToWebpage(context: Context) {
//val context = ContextAmbient.current
val openURL = Intent(Intent.ACTION_VIEW)
openURL.data = Uri.parse("https://www.example.com/")
startActivity(context, openURL, null )
}
希望这对某人有帮助!
对于那些喜欢 Kotlin 扩展功能的人尝试这个解决方案
fun Context.openUrlInBrowser(url: String) {
val intent = Intent(Intent.ACTION_VIEW).apply {
data = Uri.parse(url)
}
startActivity(intent)
}