개발새발 - IT 기술블로그
article thumbnail

 

 

 

 

 

안녕하세요. 이번 포스팅에서는 웹앱 혹은 하이브리드 앱을 만들 때 사용하는 웹뷰(WebView)를 통해, 웹페이지를 어플리케이션에 보여주는 방법에 대해 알아보겠습니다 😊

 

 

웹뷰는 안드로이드 프레임워크 내부 라이브러리로 따로 implementation은 필요하지 않습니다.

 

인터넷 페이지를 사용하기 때문에 manifest 파일에 인터넷 권한을 요청하는 코드를 넣어주시면 됩니다.

 

<code />
<uses-permission android:name="android.permission.INTERNET" />

 

메인 액티비티에서 EditText에 URL을 입력하고, 버튼을 클릭하면 웹뷰 액티비티로 넘어가는 간단한 프로그램입니다.

 

그럼 코드부터 확인 하시겠습니다.

 

 

1. 결과코드👀

 

<activity_main.xml>

<code />
<?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=".MainActivity"> <EditText android:id="@+id/enterEt" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toBottomOf="parent" android:text="https://tekken5953.tistory.com/" /> <Button android:id="@+id/enterBtn" android:layout_width="0dp" android:layout_height="wrap_content" app:layout_constraintStart_toStartOf="@+id/enterEt" app:layout_constraintEnd_toEndOf="@+id/enterEt" app:layout_constraintTop_toBottomOf="@+id/enterEt" android:layout_marginTop="15dp" android:text="Enter" android:textAllCaps="false"/> </androidx.constraintlayout.widget.ConstraintLayout>

 

 

<activity_web_view.xml>

<javascript />
<?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=".WebViewActivity"> <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="match_parent"/> </androidx.constraintlayout.widget.ConstraintLayout>

 

 

<MainActivity.kt>

<kotlin />
package com.example.webviewexam import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Button import android.widget.EditText class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val editText: EditText = findViewById(R.id.enterEt) val btn: Button = findViewById(R.id.enterBtn) val intent = Intent(this, WebViewActivity::class.java) btn.setOnClickListener{ intent.putExtra("url",editText.text.toString()) startActivity(intent) } } }

 

 

<WebViewActivity.kt>

<kotlin />
package com.example.webviewexam import android.annotation.SuppressLint import android.os.Bundle import android.util.Log import android.webkit.WebSettings import android.webkit.WebView import android.webkit.WebViewClient import androidx.appcompat.app.AppCompatActivity class WebViewActivity : AppCompatActivity() { @SuppressLint("SetJavaScriptEnabled") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_web_view) val url: String = intent.getStringExtra("url").toString() val webView = findViewById<WebView>(R.id.webView) val webSettings: WebSettings = webView.settings webSettings.javaScriptEnabled = true webSettings.loadWithOverviewMode = true webView.webViewClient = WebViewClient() webView.loadUrl(url) } }

 

 


 

 

웹뷰에 웹페이지를 띄우는 것 자체는 생각보다 간단한 것 같습니다.  웹뷰 클래스 코드에 대한 설명을 드리겠습니다.

 

 

 

메인 엑티비티의 EditText의 주소를 화면전환(intent) 해주는 과정에서 데이터를 담아 보내고, 웹뷰 엑티비티에서 받습니다.

<kotlin />
intent.putExtra("url",editText.text.toString()) … val url: String = intent.getStringExtra("url").toString()

 

 

웹뷰에서 로드하는 페이지가 자바스크립트를 사용하는 경우 자바스크립트를 허용해주어야 합니다.

<kotlin />
webSettings.javaScriptEnabled = true

 

 

컨텐츠가 웹뷰의 크기보다 클 경우 스크린 크기에 맞게 사이즈를 자동 조정합니다.

<kotlin />
webSettings.loadWithOverviewMode = true

 

 

새 창이 아닌 기존의 창에 덮어 씌워집니다.

<kotlin />
webView.webViewClient = WebViewClient()

 

 

페이지를 로드합니다.

<java />
webView.loadUrl(url)

 

이렇게 안드로이드에서 웹뷰를 통해 웹페이지를 호출하는 방법에 대해 알아보았는데요. 

 

다음 포스팅에서는 웹뷰에서 웹페이지를 컨트롤하는 부분에 대해 다뤄보도록 하겠습니다.

 

감사합니다.

 

 

 

+ 웹뷰에 대한 다음 포스팅 입니다.

2023.01.03 - [Android] - [안드로이드] 웹뷰(WebView)(2) - 접근과 제어

 

[안드로이드] 웹뷰(WebView)(2) - 접근과 제어

안녕하세요. 이전 포스팅에 이어 웹뷰에 대해 계속 알아보겠습니다. 이전엔 웹뷰를 생성하여 페이지를 로드하는 것 까지 해봤다면, 이번 글에서는 앱에서 웹뷰에 접근하고 제어하는 기능에 대

tekken5953.tistory.com

 

 

 

 

 

2. 참고

https://developer.android.com/guide/webapps/webview?hl=ko#kotlin  

 

WebView에서 웹 앱 빌드  |  Android 개발자  |  Android Developers

WebView에서 웹 앱 빌드 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 웹 애플리케이션 또는 웹페이지만 클라이언트 애플리케이션의 일부로 제공하려는 경

developer.android.com

 

 

3. 소스코드

https://github.com/tekken5953/WebViewExam

 

GitHub - tekken5953/WebViewExam

Contribute to tekken5953/WebViewExam development by creating an account on GitHub.

github.com