본문 바로가기
안드로이드 스튜디오

[안드로이드 스튜디오] 앱만들기 #9. WebView

by sojung118 2024. 9. 3.

[ 실행 화면 ]

네이버 화면 띄우기


 

주말 열심히 쉬고 다시 시작한 홍드로이드 안드로이드 스튜디오 강의 듣기..

이번 강의는 초반에도 언급했는데 실무에서도 많이 쓰이는 WebView를 가져오는 강의였다.

내가 특정 url을 지정하면 AVD 화면에 그 url 화면을 띄울 수 있다!

 


 

1. activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

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

</LinearLayout>

 

오늘도 activity_main.xml은 간단-하다.

LinearLayout으로 바꿔주고 WebView 추가해주기 + id 설정해주기만 하면 xml 설정은 끝!

 

 


 

 

2. MainActivity.java

package com.example.webviewexample;

import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

public class MainActivity extends AppCompatActivity {


    private WebView webView;
    //웹뷰를 틀때 어떤 주소를 지정해서 틀 것인지 지정해주기
    private String url = "https://www.naver.com";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        webView = findViewById(R.id.webView);

        //웹뷰 관련 세팅해주기
        //JavaScript라는 자바의 부가적인 언어가 있는데 그것을 허용해주기
        webView.getSettings().setJavaScriptEnabled(true);
        //특정 주소를 가져와서 틀어라
        webView.loadUrl(url);
        //웹뷰환경을 구글 크롬 브라우저에 맞춰서 쾌적하게 돌리기 위해 하는 추가 세팅
        webView.setWebChromeClient(new WebChromeClient());
        webView.setWebViewClient(new WebViewClientClass());

        //처음 webViewClientClass를 하면 빨갛게 에러남
        //alt+Enter해서 innerclass create하기


    }

    //앱상에서 뒤로가기 버튼을 눌렀을 때 웹뷰가 정상적으로 종료될 수 있도록 하는 세팅
    // ctrl+알파벳o


    //다양한 안드로이드의 키를 입력을 했을때 어떠한 동작을 하라고 지정해주는 것
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        //뒤로가기를 눌렀을때 && 뒤로갈 수 있게되면
        if((keyCode == KeyEvent.KEYCODE_BACK) && (webView.canGoBack())) {
            webView.goBack(); //뒤로 가라
            return true;
        }

        return super.onKeyDown(keyCode, event);
    }

    private class WebViewClientClass extends WebViewClient {
        //ctrl+o 해서 shouldOverrideUrlLoading 가져오기
        //shouldOverrideUrlLoading 메소드는 현재 페이지의 url을 읽어올 수 있는 메소드임
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }
}

//여기까지 했으면 AndroidManifest.xml에 들어가서 인터넷 권한 설정을 해주어야함.

 

 

강의를 들으면서 중간중간 주석을 추가했으니까 보면서 이해하면 될 듯!

항상 하던대로 변수 선언해주고, 이동하고 싶은 url 설정해서 String url 변수에 넣어주자.

나의 경우 https://www.naver.com 을 url에 넣어줘서 네이버 화면을 가져오도록!

 

 

webView = findViewById(R.id.webView);

//웹뷰 관련 세팅해주기
//JavaScript라는 자바의 부가적인 언어가 있는데 그것을 허용해주기
webView.getSettings().setJavaScriptEnabled(true);
//특정 주소를 가져와서 틀어라
webView.loadUrl(url);
//웹뷰환경을 구글 크롬 브라우저에 맞춰서 쾌적하게 돌리기 위해 하는 추가 세팅
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClientClass());

//처음 webViewClientClass를 하면 빨갛게 에러남
//alt+Enter해서 innerclass create하기

 

 

웹뷰를 세팅하는 부분이다.

webView.getSettings().setJavaScriptEnabled(true); 해주고

webView.loadUrl(url); 로 지정한 url을 load 해준다.

이후는 웹뷰 환경을 구글 크롬 브라우저에 맞춰 쾌적하게 돌리기 위해 추가 세팅을 해준다.

 

 

//다양한 안드로이드의 키를 입력을 했을때 어떠한 동작을 하라고 지정해주는 것
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    //뒤로가기를 눌렀을때 && 뒤로갈 수 있게되면
    if((keyCode == KeyEvent.KEYCODE_BACK) && (webView.canGoBack())) {
        webView.goBack(); //뒤로 가라
        return true;
    }

    return super.onKeyDown(keyCode, event);
}

private class WebViewClientClass extends WebViewClient {
    //ctrl+o 해서 shouldOverrideUrlLoading 가져오기
    //shouldOverrideUrlLoading 메소드는 현재 페이지의 url을 읽어올 수 있는 메소드임
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}

 

 

위 코드도 뒤로 가기 키를 눌렀을 때 뒤로가는 기능 구현하기

+ WebViewClientClass를 create 해주면 나타나는 창 안에

현재 페이지의 url을 읽어올 수 있는 메소드인 shouldOverrideUrlLoading 메소드를 가져와준다.

 


 

 

여기까지했으면 마지막으로 AndroidManifest.xml에 들어가서 인터넷 권한 설정을 해주어야한다.

권한 설정을 안해주면 url 창이 안뜸!

 

 

 

3. AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"/> 부분 추가해주기!!

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

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

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.WebViewExample"
        tools:targetApi="31">
        <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>

 

 

이렇게 해주고 AVD를 실행하면 내가 설정한 url 화면이 정상적으로 나오는 것을 확인할 수 있다!

확실히 이렇게 해당 페이지를 가져오는 부분은 실무에서 잘 사용될 것 같으니까 잘 기억해두기..

 

 


 

[ url 을 구글로 설정 시 실행 화면 ]

https://www.google.com