반응형
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
하단 문서 참고.
반응형
'Android' 카테고리의 다른 글
[Android] 개발 중에 Room DB 변경(feat. Kotlin) (0) | 2024.12.22 |
---|---|
[Android] 화면 고정, locale 고정 attachBaseContext(Context newBase) (0) | 2024.11.29 |
[Android] 앱 삭제 없이 SQLite DB 업데이트 (feat. Java) (2) | 2024.11.19 |
[Android] Android SharedPreference 사용하기 (feat. Kotlin) (0) | 2024.11.18 |
[Android] 다중언어 설정 (feat. Java) (0) | 2024.11.11 |