Android 웹뷰 테스트

JAVA / 웹뷰

Posted by ETHAN KIM on June 01, 2022 · 5 mins read
Android Java

주요 개념

  • 웹뷰창 띄우기 / 타겟 url load


실습 환경

  • Winodws / Android Studio / JDK


구현 결과


./java/com.example.webviewtest/MainActivity.java

  • 웹뷰 초기셋팅
  • url 입력 후 Enter 이벤트 감지하여 페이지 이동
  • 웹뷰 초기세팅 및 url 설정
package com.example.webviewtest;
import androidx.appcompat.app.AppCompatActivity;

import android.annotation.TargetApi;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    WebView wView;      // webView
    ProgressBar pBar;   // loading
    EditText urlEt;     // input for url

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

        wView = findViewById(R.id.wView);
        pBar =  findViewById(R.id.pBar);
        pBar.setVisibility(View.GONE);      // hide loading

        initWebView();                      // init webView


        urlEt = findViewById(R.id.urlEt);
        urlEt.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if(actionId == EditorInfo.IME_ACTION_DONE || event.getKeyCode() == KeyEvent.KEYCODE_ENTER){   // 키보드의 엔터키를 눌러서
                    wView.loadUrl("http://"+urlEt.getText().toString()+""); // connect url
                }
                return false;
            }
        });


    }

    // conf webView
    public void initWebView(){
        // 1. Connect
        wView.setWebViewClient(new WebViewClient(){
            @Override                                   // 1) Loading
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                pBar.setVisibility(View.VISIBLE);       //Show Loading
            }
            @Override                                   // 2) Start
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                pBar.setVisibility(View.GONE);          //Hide Loading
            }
            @TargetApi(Build.VERSION_CODES.N)
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                String url=request.getUrl().toString();
                view.loadUrl(url);
                return true;
            }
        });
        // 2. WebSettings
        WebSettings ws = wView.getSettings();
        ws.setJavaScriptEnabled(true); // Javascript permit
        wView.setWebViewClient(new WebViewClient());
        wView.getSettings().setUseWideViewPort(true);
        wView.getSettings().setLoadWithOverviewMode(true);
        wView.getSettings().setDomStorageEnabled(true);

        // 3. start url
        wView.loadUrl("https://www.naver.com");
    }

    // back event
    @Override
    public void onBackPressed() {
        if(wView.canGoBack()){      // if IS BACK PAGE
            wView.goBack();         // GO BACK
        }else{
            super.onBackPressed();  // IF NOT BACK PAGE -> EXIT APPLICATION
        }
    }
}


./res/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:focusable="true"
    android:focusableInTouchMode="true">

    <!-- input area -->
    <EditText
        android:id="@+id/urlEt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="주소를 입력하세요."
        android:inputType="textUri"/>

    <!-- webview / loading -->
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="0dp" android:layout_weight="1">
        <WebView
            android:id="@+id/wView"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
        <ProgressBar
            android:id="@+id/pBar"
            style="?android:attr/progressBarStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center" />
    </FrameLayout>

</LinearLayout>