Android/Kotlin
[Android, Kotlin] WebView
겨울시인
2022. 4. 20. 11:20
1. 기능 구현
앱에 Webpage를 View 형태로 배치를 해서 보여주도록 해보자.
2. Android Studio에서 기본 프로젝트(with empty activity) 생성하자!
생성시 'Empty Activity'로 기본 생성
3. ViewBinding 사용을 위한 build.gradle 설정
android {
// 뷰 바인딩 옵션 활성화
viewBinding {
enabled = true
}
}
4. AndroidManifest.xml
- 인터넷 사용 Permission 허용 구문
<uses-permission android:name="android.permission.INTERNET"/>
- 안드로이드9(APL Lv 28) 부터 강화된 네트워크 보안정책 해결을 위해
android:usesCleartextTraffic="true"
이와 관련된 보다 자세한 내용은 <안드로이드 http 프로토콜 접속 시 예외발생 조치> 참고
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.webview">
<!-- 인터넷 사용을 위한 Permission 허용-->
<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:supportsRtl="true"
android:usesCleartextTraffic="true"
android:theme="@style/Theme.WebView">
<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>
5. activity_main.xml
앱 내에서 Webpage를 보여줄 WebView 영역을 설정하자.
<?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">
<WebView
android:id="@+id/webView"
android:layout_width="409dp"
android:layout_height="729dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
6. MainActivity.kt
- javaScrip 허용 : webpage 에 쓰인 javaScrip에 대해서 문제없도록 허용하도록 하자.
- webViewClient, webChromeClient 구문
이 구문을 설정하지 않으면 URL을 load 했을때 default browser 로 새창이 뜨게 된다.
앱 내의 WebView 영역에 webpage가 load 되기 위해서 필요하다.- loadUrl : 해당 webpage를 가져온다.
- onBackPressed 구현
default 로 back 을 누르면 앱이 종료되므로, webpage 이동 중, 이전 page가 있다면 goBack 없으면 종료
class MainActivity : AppCompatActivity() {
private var mBinding: ActivityMainBinding? = null
private val binding get() = mBinding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
// 자바 스크립트 허용
binding.webView.settings.javaScriptEnabled = true
/* 웹뷰에서 새 창이 뜨지 않도록 방지하는 구문 */
binding.webView.webViewClient = WebViewClient()
binding.webView.webChromeClient = WebChromeClient()
/* 링크 주소를 로드 */
binding.webView.loadUrl("https://www.naver.com")
}
override fun onBackPressed() {
if(binding.webView.canGoBack()){
// 웹싸이트에서 뒤로 갈 페이지가 존재 할 경우
binding.webView.goBack()
}
else {
super.onBackPressed()
}
}
}
7. 실행결과
앱 내부 View에서 정상적으로 Webpage가 보여짐. 끝!