티스토리 뷰

이번에는 앱 내에서 웹 화면을 보여주는 것과 주소를 받아 웹 사이트로 이동하는 것을 만들어보겠습니다

먼저 화면을 보여드리겠습니다

 

 

웹뷰가 크게 있고 하단에 주소를 적는 에딧텍스트와 버튼이 두개 있습니다

버튼 웹뷰 로드를 누르면 웹뷰에서 웹사이트를 접속하고

웹으로 연결을 누르면 타 인터넷 앱에서 웹사이트를 접속합니다

xml코드를 보여드리겠습니다

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

    <WebView
        android:id="@+id/webView"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginBottom="100dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/editText"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:gravity="center"
        android:inputType="textUri"
        android:text="https://o-s-z.tistory.com/"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/button"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/webView" />

    <Button
        android:id="@+id/button"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:background="#ffffff"
        android:onClick="bt1"
        android:text="웹뷰 로드"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/webView" />

    <Button
        android:id="@+id/button2"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:background="#ffffff"
        android:onClick="bt2"
        android:text="웹으로 연결"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

웹뷰와 에딧텍스트와 버튼 2개로 구성되어있습니다

에딧텍스트는 uri를 적기 적합하게 인풋타입을 textUri로 줬습니다

그리고 각 버튼은 누르면 함수 bt1과 bt2를 실행하도록 해놨습니다

 

java코드를 보여드리겠습니다

package com.ehsehsl.osz;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
    EditText editText;
    WebView webView;

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

        editText = findViewById(R.id.editText);
        webView = findViewById(R.id.webView);
    }

    public void bt1(View view) {
        webView.setWebViewClient(new WebViewClient());  // 이것 안 넣어주면 다른 앱으로 넘어갈 수 있음
        webView.getSettings().setJavaScriptEnabled(true);   // 자바스크립트 사용 가능하게
        webView.loadUrl(editText.getText().toString()); // 적은 주소로 웹뷰 실행
    }

    public void bt2(View view) {
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(editText.getText().toString()));
        startActivity(intent); // 뷰 열기
    }
}

전에는 bt1안에 첫줄을 생략해도 웹뷰에서 잘 실행이 됐는데 타 인터넷 앱으로 넘어가길래 추가해줬습니다

두번째 줄은 넣어줘야 웹이 정상적으로 실행이 됩니다

세번째 줄로 로드합니다

 

bt2는 인텐트를 이용해 간단하게 인터넷 앱으로 실행하게 만듭니다

 

하지만 여기까지만 하면 bt1이 제대로 작동하지 않습니다

AndroidManifest.xml에 코드를 추가해야 합니다

위치는 안드로이드로 봤을때 app>manifests안에 있습니다

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.ehsehsl.osz">
    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:usesCleartextTraffic="true"
        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>

여기서 인터넷을 사용하려면 추가해야하는 코드는

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

이것 입니다

 

그리고 https면 상관없지만 http를 사용하려면

android:usesCleartextTraffic="true"

이 코드도 추가하여야 합니다

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함