Mobile/Android

안드로이드 Webview 시작하기

SambaLim 2020. 4. 26. 17:45

기본 안드로이드 프로젝트를 생성한 후, 웹앱을 만들기 위해 기본템플릿을 만드는 과정을 기록합니다.

Permission

app > manifest > AndroidManifest.xml 에서 android.permission.INTERNET 을 추가합니다.

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

<application> 태그 위에 작성하면 됩니다.

Layout

모바일 화면에 딱 맞춰지도록 Layout을 정해줍니다.

app > res > layout > acivity_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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

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

</LinearLayout>

화면에 꽉차보이도록 <Webview> 태그의 너비와 높이 모두 match_parent 로 전체화면에 맞춰주었습니다.

MainActivity

MainActivity 클래스 내에 Webview 를 선언합니다.

public class MainActivity extends AppCompatActivity {

    private WebView webView;

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

webView 에 웹앱을 위한 기본 세팅을 합니다.

import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;

// ...

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

        // URL 필요
    loadWebviewWithURL(URL);
}

private void loadWebviewWithURL(String url) {
    webView = (WebView) findViewById(R.id.webView);
    webView.getSettings().setDefaultTextEncodingName("UTF-8");
    webView.getSettings().setUseWideViewPort(true);
    webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    webView.getSettings().setBlockNetworkImage(false);
    webView.getSettings().setLoadsImagesAutomatically(true);
    webView.getSettings().setSupportMultipleWindows(true);
    webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
    webView.clearCache(true);
    webView.getSettings().setAllowFileAccess(true);
    webView.getSettings().setLoadWithOverviewMode(true);
    webView.getSettings().setAllowUniversalAccessFromFileURLs(true);
    webView.getSettings().setDomStorageEnabled(true);
    webView.getSettings().setDatabaseEnabled(true);
    webView.getSettings().setAllowFileAccessFromFileURLs(true);
    webView.getSettings().setAllowContentAccess(true);

    webView.getSettings().setJavaScriptEnabled(true);

        // 아직 Android Bridge를 만들지는 않았어요!
    webView.addJavascriptInterface(new AndroidBridge(this), "ABridge");
    webView.setWebChromeClient(new WebChromeClient());

    webView.loadUrl(url);
}

AndroidBridge

Client(Web)에서 Android를 호출할 수 있도록 Bridge를 생성합니다.

package com.tmoa.us;

import android.content.Context;
import android.webkit.JavascriptInterface;
import android.widget.Toast;

public class AndroidBridge {

    private Context context;

    public AndroidBridge(Context context) {
        this.context = context;
    }

    @JavascriptInterface
    public void testMethod() {
        Toast.makeText(context, "세팅테스트를 합니다.", Toast.LENGTH_SHORT).show();
    }
}

MainActivity.java

loadWebviewWithURL 메소드내에서 아래의 코드는 다음과 같은 역할을 합니다.

webView.addJavascriptInterface(new AndroidBridge(this), "ABridge");
// JS
ABridge.testMethod();

Client(Web)에서 JS를 통해 다음과 같이 메소드를 실행시키면 AndroidBridge 클래스의 testMethod 메소드가 실행되게 됩니다.

상단 타이틀바 없애기

app > manifest > AndroidManifest.xml 파일에서 android:theme 에 style이 어디정의되어 있는지 확인합니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.tmoa.us">
    <uses-permission android:name="android.permission.INTERNET"></uses-permission>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

현재의 경우, @style/AppTheme 에 있다는 것을 확인하고 res > values > styles.xml 로 이동합니다.

AppThemename 으로 가지고 있는 <style> 내에 다음과 같이 item 을 넘겨줍니다.

<!-- 상단의 Title Bar 제거 -->
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>

styles.xml 전체소스

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>

        <!-- 상단의 Title Bar 제거 -->
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

</resources>

'Mobile > Android' 카테고리의 다른 글

같은 패키지 명으로 APP 2개 만들기  (0) 2019.05.13
안드로이드 미디어 스캐닝  (0) 2019.03.30
안드로이드 앱 아이콘 설정  (0) 2019.02.10