본문 바로가기
개발 공부/안드로이드 스튜디오(코틀린)

안드로이드 스튜디오(Web 뷰)

by momo'sdad 2023. 10. 18.

● Web View 코드 및 화면

<?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=".ViewActivity">

    <WebView
        android:id="@+id/wv"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginStart="1dp"
        android:layout_marginTop="1dp"
        android:layout_marginEnd="1dp"
        android:layout_marginBottom="1dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

WebView화면의 ID: - wv: 웹 화면을 보여주는 창

● Web View Activity

package com.example.ex221004;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.OnNewIntentProvider;

import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import com.example.ex221004.databinding.ActivityViewBinding;

public class ViewActivity extends AppCompatActivity {

    ActivityViewBinding binding;
    WebView wv; // 인터넷 화면을 보여줄 WebView
    WebSettings webSettings;  // WebView의 설정을 담고 있는 객체

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityViewBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        wv = binding.wv;
        webSettings = wv.getSettings();
        webSettings.setSupportZoom(true); 
        webSettings.setJavaScriptEnabled(true); 
        webSettings.setBuiltInZoomControls(true); 
        webSettings.setDomStorageEnabled(true); 
        webSettings.setSupportMultipleWindows(false); 
        webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); 
        webSettings.setCacheMode(webSettings.LOAD_CACHE_ELSE_NETWORK); 
        webSettings.setUseWideViewPort(true); 
        webSettings.setJavaScriptCanOpenWindowsAutomatically(false); 
        webSettings.setLoadWithOverviewMode(true); 

        wv.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                wv.loadUrl(url);
                return true;
            }
        });
        wv.loadUrl("http://www.naver.com/");
    }
    // onCreate() 끝

    @Override
    public void onBackPressed() {

        if(wv.canGoBack()){
            wv.goBack();
        }else{
            super.onBackPressed(); // 부모의 뒤로가기 메소드 호출
        }
    }
}
  • WebView wv; # 인터넷 화면을 보여줄 WebView
  • WebSettings webSettings; # WebView의 설정을 담고 있는 객체

  • wv = binding.wv;

webSettings = wv.getSettings();

webSettings.setSupportZoom(true); // Zoom 사용 여부

webSettings.setJavaScriptEnabled(true); // JavaScript 사용 여부

webSettings.setBuiltInZoomControls(true); // 화면 확대 축소 허용 여부

webSettings.setDomStorageEnabled(true); // 로컬 저장소 사용 여부

webSettings.setSupportMultipleWindows(false); // 멀티윈도우 사용 여부

webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); // 컨텐츠 사이즈 맞추기

webSettings.setCacheMode(webSettings.LOAD_CACHE_ELSE_NETWORK); // 캐시 사용 여부

webSettings.setUseWideViewPort(true); // view port 사용 여부

webSettings.setJavaScriptCanOpenWindowsAutomatically(false); // JS가 window.open() 여부

webSettings.setLoadWithOverviewMode(true); // 메타 태그 허용 여부

  • wv.setWebViewClient(new WebViewClient(){ # 페이지 컨트롤을 위한 기본적인 함수, 다양한 요청, 알림을 수신하는 기능을 한다.

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

# 만약 유저가 로딩한 컨텐츠에서 링크를 클릭할 경우에, 어떻게 할지를 override하는 것

-> 잠시 특정 웹사이트 페이지를 유저에게 보여주고, 클릭시에는 크롬같은 브라우저에서 웹서핑을 하도록 한다면, 아래와 같이 startActivity를 구현

wv.loadUrl(url);

return true;

}

});

  • onCreate() 끝난 후 뒤로가기 버튼 눌렀을 때 웹페이지 뒤로 이동

@Override

public void onBackPressed() { # 뒤로 가기 버튼 눌렀을때

if(wv.canGoBack()){

wv.goBack();

}else{

super.onBackPressed(); // 부모의 뒤로가기 메소드 호출

}

}

반응형