Android

[Android] webView

김한토 2024. 11. 28. 10:53
반응형

MainActivity.kt

class MainActivity : AppCompatActivity() {

    private val TAG = "MainActivity"

    private lateinit var binding: ActivityMainBinding

    private lateinit var webView: WebView
    private lateinit var progressBar: ProgressBar

    private var doubleBackToExitPressedOnce = false


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        webView = binding.webView
        progressBar = binding.progressBar

        initWebView()
        webView.loadUrl(Constants.LOAD_URL)

    }

    override fun onResume() {
        Log.d(TAG, "onResume()")
        super.onResume()
    }

    override fun onPause() {
        Log.d(TAG, "onPause()")
        super.onPause()
    }

    override fun onDestroy() {
        Log.d(TAG, "onDestroy()")
        super.onDestroy()
    }

    private fun initWebView() {

        webView.webViewClient = object : WebViewClient() {

            override fun onPageStarted(
                view: WebView?,
                url: String?,
                favicon: Bitmap?,
            ) {
                progressBar.visibility = View.VISIBLE
            }

            override fun onPageFinished(view: WebView?, url: String?) {
                super.onPageFinished(view, url)
                progressBar.visibility = View.GONE
            }
        }

    }

    override fun onBackPressed() {
        if (webView.canGoBack()) {
            webView.goBack()
        } else {
            if (doubleBackToExitPressedOnce) {
                super.onBackPressed()
                return
            }
            this.doubleBackToExitPressedOnce = true
            Toast.makeText(this, "한번 더 누르시면 종료됩니다.", Toast.LENGTH_SHORT).show()

            //2초 후에 다시 누를 수 있도록 초기화
            Handler(Looper.getMainLooper()).postDelayed({
                doubleBackToExitPressedOnce = false
            }, 2000)
        }
    }
}

 

 

 

 

 

 

activity_main.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"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ProgressBar
        android:id="@+id/progressBar"
        style="?progressBarStyle"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:elevation="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />


    <WebView
        android:id="@+id/webView"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    />


</androidx.constraintlayout.widget.ConstraintLayout>

 

 

간단하게 바로 메인액티비티 진입시 프로그래스 바를 띄우고 내가 원하는 URL을 로딩한 뒤 프로그래스 바를 없앤다. 

 

또한 뒤로 가기를 누르면 webView에서 depths가 있으면 그 전 페이지로 이동하고 없을 시에는 연속으로 두번 눌렀을 때 앱이 종료된다.

 

추가로 

onShowFileChooser()
openCameraCaptureChooser()
createImageFile()

등 다양한 웹뷰 함수들이 존재하므로 찾아서 제공하는 대로 코드를 작성하면 된다. 

 

https://developer.android.com/reference/android/webkit/WebChromeClient

 

WebChromeClient  |  Android Developers

 

developer.android.com

 

하단 문서 참고.

 

 

반응형