Android - 외부 웹뷰가 아닌 인앱 웹뷰 기반 접근 처리 (간단)

2025. 1. 31. 17:23· Today I Learn
반응형
<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <FrameLayout
            android:id="@+id/toolBarLy"
            android:layout_width="match_parent"
            android:layout_height="56dp"
            android:background="@color/white"
            app:layout_scrollFlags="scroll|enterAlways">

            <ImageButton
                android:id="@+id/backBtn"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:layout_gravity="center_vertical"
                android:background="?android:attr/selectableItemBackground"
                android:scaleType="centerInside"
                android:src="@drawable/left_arrow"
                android:tint="@color/primary_text"
                android:padding="17.0dp"/>

            <TextView
                android:id="@+id/topTitleText"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_marginLeft="50dp"
                android:text="@string/title"
                android:textColor="@color/primary_text"
                android:fontFamily="@font/bold"
                android:textSize="18dp"/>

        </FrameLayout>

    </FrameLayout>

    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

위와 같이 상단 Bar 하단에 WebView 영역이 있는 인앱 웹뷰가 구성되어 있습니다.

이럴 경우 외부 브라우저를 통해 웹뷰 접속이 아니라 인앱에서 웹뷰를 열어 현재의 앱 Context를 유지하는 것이 목적이 됩니다.

활용하는 Activity 코드에서 WebViewClient 설정을 추가해 주도록 합니다.

@SuppressLint("SetJavaScriptEnabled")
private fun initWebView(url: String) = with(binding) {
    val set = webView.settings
    set.javaScriptEnabled = true
    set.builtInZoomControls = false
    webView.settings.javaScriptCanOpenWindowsAutomatically = true

    // **WebViewClient 추가 → 앱 내부에서 웹페이지 열리게 설정**
    webView.webViewClient = object : WebViewClient() {
        override fun shouldOverrideUrlLoading(view: WebView, request: WebResourceRequest): Boolean {
            view.loadUrl(request.url.toString()) // 현재 WebView에서 URL 로드
            return true // 외부 브라우저가 아니라 WebView에서 처리
        }
    }

    webView.webChromeClient = object : WebChromeClient() {
        override fun onProgressChanged(view: WebView, newProgress: Int) {
        }
    }

    webView.loadUrl(url)
}

- 기본적으로 WebView는 loadUrl()이 호출하면 외부 브라우저를 기반으로 동작하는 것이 Default입니다.

- 하지만 shouldOverrideUrlLoading을 구성하면 URL을 로드할 때 외부 브라우저를 열지 않고 WebView에서 열게 설정됩니다.

- view.loadUrl(request.url.toString())을 호출하면 WebView 내부에서 처리

추가)

웹뷰를 열었는데, 특정 컨텐츠가 엑박 표시가 뜨면서 안 보일 경우, HTTP/HTTPS 접근 제한 때문일 수 있습니다.

아래 코드를 추가로 webView Settings에 적용해줍니다.

webView.settings.mixedContentMode = WebSettings.MIXED_CONTENT_ALWAYS_ALLOW

 

반응형
저작자표시 (새창열림)
'Today I Learn' 카테고리의 다른 글
  • YIQ 개념 기반 밝기 판별
  • [Android] getIdentifier() 활용 앱 리소스 가져오기
  • [Kotlin] 리스트에서 랜덤으로 값 추출하기
  • [TroubleShooting] Fatal Exception: java.lang.IllegalStateException: Fragment
SeungYong.Lee
SeungYong.Lee
반응형
SeungYong.Lee
Win-Dev
SeungYong.Lee
전체
오늘
어제
  • All (241) N
    • Development (141) N
      • Android (137) N
      • iOS (0)
      • Flutter (4)
      • Backend (0)
    • Algorithm (5)
    • Knowledge (5)
      • IT (2)
      • Science (0)
      • ETC & Tip (3)
    • Today I Learn (28)
    • Coding Test (62)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 안녕하세요. 반갑습니다 :)

인기 글

태그

  • Widget
  • coroutine
  • 코딩테스트
  • Animation
  • glance
  • compose
  • Java
  • 코틀린
  • Android
  • HTTP
  • Flutter
  • Collection
  • bitmap
  • exception
  • 프로그래머스
  • dfs
  • 비동기처리
  • Retrofit
  • hilt
  • Kotlin

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
SeungYong.Lee
Android - 외부 웹뷰가 아닌 인앱 웹뷰 기반 접근 처리 (간단)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.