Mobile Apps 2023W Lecture 6: Difference between revisions
|  Created page with "==Resources==  * [https://developer.android.com/jetpack/compose/interop/interop-apis Interoperability APIs in Compose] * [https://developer.android.com/develop/ui/views/layout/webapps/webview Build web apps in WebView]" | No edit summary | ||
| (One intermediate revision by the same user not shown) | |||
| Line 3: | Line 3: | ||
| * [https://developer.android.com/jetpack/compose/interop/interop-apis Interoperability APIs in Compose] | * [https://developer.android.com/jetpack/compose/interop/interop-apis Interoperability APIs in Compose] | ||
| * [https://developer.android.com/develop/ui/views/layout/webapps/webview Build web apps in WebView] | * [https://developer.android.com/develop/ui/views/layout/webapps/webview Build web apps in WebView] | ||
| * [https://www.geeksforgeeks.org/webview-in-android-using-jetpack-compose/ Android WebView & Jetpack Compose] | |||
| ==Code== | |||
| <syntaxhighlight lang="kotlin" line> | |||
| package carleton.comp2601.webviewcompose | |||
| import android.os.Bundle | |||
| import android.view.ViewGroup | |||
| import android.webkit.WebView | |||
| import android.webkit.WebViewClient | |||
| import androidx.activity.ComponentActivity | |||
| import androidx.activity.compose.setContent | |||
| import androidx.compose.material.* | |||
| import androidx.compose.runtime.Composable | |||
| import androidx.compose.ui.graphics.Color | |||
| import androidx.compose.ui.tooling.preview.Preview | |||
| import androidx.compose.ui.viewinterop.AndroidView | |||
| class MainActivity : ComponentActivity() { | |||
|     override fun onCreate(savedInstanceState: Bundle?) { | |||
|         super.onCreate(savedInstanceState) | |||
|         setContent { | |||
|             // Calling the composable function | |||
|             // to display element and its contents | |||
|             MainContent() | |||
|         } | |||
|     } | |||
| } | |||
| // Creating a composable | |||
| // function to display Top Bar | |||
| @Composable | |||
| fun MainContent() { | |||
|     Scaffold( | |||
|         topBar = { TopAppBar(title = {Text("COMP 2601")})}, | |||
|         content = { MyContent() } | |||
|     ) | |||
| } | |||
| // Creating a composable | |||
| // function to create WebView | |||
| // Calling this function as | |||
| // content in the above function | |||
| @Composable | |||
| fun MyContent(){ | |||
|     // Declare a string that contains a url | |||
|     val mUrl = "https://news.ycombinator.com" | |||
|     // Adding a WebView inside AndroidView | |||
|     // with layout as full screen | |||
|     AndroidView(factory = { | |||
|         WebView(it).apply { | |||
| //            layoutParams = ViewGroup.LayoutParams( | |||
| //                ViewGroup.LayoutParams.MATCH_PARENT, | |||
| //                ViewGroup.LayoutParams.MATCH_PARENT | |||
| //            ) | |||
|             webViewClient = WebViewClient() | |||
|             loadUrl(mUrl) | |||
|         } | |||
|     }, update = { | |||
|         //it.loadUrl(mUrl) | |||
|     }) | |||
| } | |||
| // For displaying preview in | |||
| // the Android Studio IDE emulator | |||
| @Preview(showBackground = true) | |||
| @Composable | |||
| fun DefaultPreview() { | |||
|     MainContent() | |||
| } | |||
| </syntaxhighlight> | |||
Latest revision as of 20:33, 8 February 2023
Resources
Code
package carleton.comp2601.webviewcompose
import android.os.Bundle
import android.view.ViewGroup
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material.*
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.viewinterop.AndroidView
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            // Calling the composable function
            // to display element and its contents
            MainContent()
        }
    }
}
// Creating a composable
// function to display Top Bar
@Composable
fun MainContent() {
    Scaffold(
        topBar = { TopAppBar(title = {Text("COMP 2601")})},
        content = { MyContent() }
    )
}
// Creating a composable
// function to create WebView
// Calling this function as
// content in the above function
@Composable
fun MyContent(){
    // Declare a string that contains a url
    val mUrl = "https://news.ycombinator.com"
    // Adding a WebView inside AndroidView
    // with layout as full screen
    AndroidView(factory = {
        WebView(it).apply {
//            layoutParams = ViewGroup.LayoutParams(
//                ViewGroup.LayoutParams.MATCH_PARENT,
//                ViewGroup.LayoutParams.MATCH_PARENT
//            )
            webViewClient = WebViewClient()
            loadUrl(mUrl)
        }
    }, update = {
        //it.loadUrl(mUrl)
    })
}
// For displaying preview in
// the Android Studio IDE emulator
@Preview(showBackground = true)
@Composable
fun DefaultPreview() {
    MainContent()
}