본문 바로가기

Android(Kotlin)

[Android] WebView 사용하기

 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <!--    인터넷 퍼미션 (권한)-->
    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:usesCleartextTraffic="true"
        android:supportsRtl="true"
        android:theme="@style/Theme.Design.NoActionBar">

        <activity
            android:name=".WebActivity"
            android:exported="false" />
        <activity
            android:name=".SharedActivity"
            android:exported="false" />
        <activity
            android:name=".NaviActivity"
            android:exported="false" />
        <activity
            android:name=".ListActivity"
            android:exported="false" />
        <activity
            android:name=".SubActivity"
            android:exported="false" />
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

WebActivity.kt

package com.example.myapplication

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.webkit.WebChromeClient
import android.webkit.WebViewClient
import com.example.myapplication.databinding.ActivityWebBinding

class WebActivity : AppCompatActivity() {
    private lateinit var binding: ActivityWebBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = ActivityWebBinding.inflate(layoutInflater)
        val root = binding.root
        setContentView(root)

        binding.webView.settings.javaScriptEnabled = true //자바 스크립트 허용
        /* 웹 뷰에서는 새 창이 뜨지 않는 구문 거의 필수적인 옵션*/
        binding.webView.webViewClient = WebViewClient()
        binding.webView.webChromeClient = WebChromeClient()
        /* 웹 뷰에서는 새 창이 뜨지 않는 구문*/
        binding.webView.loadUrl("https://www.rainymood.com/")
    }

    override fun onBackPressed() { //백버튼 누를 시 수행할 로직 구현

        if (binding.webView.canGoBack())
        {//웹사이트에서 뒤로갈 페이지가 존재한다면
            binding.webView.goBack() //웹 사이트 뒤로가기
        } else {

            super.onBackPressed() //본래의 백버튼 기능 수행
        }
    }
}

activity_web.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".WebActivity">

    <WebView
        android:id="@+id/web_view"
        android:layout_width="409dp"
        android:layout_height="729dp"
        android:layout_marginTop="1dp"
        android:layout_marginBottom="1dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.0" />
</androidx.constraintlayout.widget.ConstraintLayout>