有没有办法通过单击 Compose Scaffold 中 TopAppBar 中的 IconButton 来打开网页?

问题描述 投票:0回答:2

我是 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) {
        ...
    }
}
android kotlin android-jetpack android-jetpack-compose
2个回答
5
投票

哇,我在这方面花了太多时间,但能够弄清楚如何启动以及从可组合函数中打开 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 )
}

希望这对某人有帮助!


0
投票

对于那些喜欢 Kotlin 扩展功能的人尝试这个解决方案

fun Context.openUrlInBrowser(url: String) {
    val intent = Intent(Intent.ACTION_VIEW).apply {
        data = Uri.parse(url)
    }
    startActivity(intent)
}
© www.soinside.com 2019 - 2024. All rights reserved.