728x90

연습하는 과정에서 중도에 이름을 변경해서 다시 하느라고 이름이 좀 다르다.

IntentBasedWebView 가 아니라 그냥 WebView 만드는 과정이다.

IntentBasedWebView 라는 항목이 나오는 걸 없애는 것도 알고 싶은데 아직은 모르겠다. (ActionBar 제거하는 메소드로 처리하면 됨)

티스토리, 네이버, 블로그 라는 글자만 누르면 하단에 내용이 바뀌도록 구현했다.

기능을 추가해보면서 발생하는 문제점 등이 뭔지 파악도 하면서 배우는 중이다.

내용은 처음 작성하고 나서 계속 학습하면서 내용을 보완하고, 하단에 추가하는 방식으로 작성하고 있다.

남들을 위한 강의가 아니라 내가 이걸 배워가는 과정을 기록하고 있으니까 ^^




1 . WebView를 보여줄 준비과정


2. Layout 구성 과정

LinearLayout 으로 변경했다.

완벽하게 내것으로 소화를 하려면 좀 더 연습이 필요하다.


첨부된 파일은 activity_main.xml 과 MainActivity.java 파일이다.

mywebview_example.zip


<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"   
    android:layout_width="match_parent"
    android:layout_height="match_parent"   
    android:orientation="vertical" >   
   
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >
      
         <TextView
             android:id="@+id/TextView01"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_weight="1"
             android:gravity="center"
             android:padding="20dip"
             android:text="티스토리"
             android:textColor="#000000" />

         <TextView
             android:id="@+id/TextView02"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_weight="1"
             android:gravity="center"
             android:padding="20dip"
             android:text="네이버"
             android:textColor="#000000" />

         <TextView
             android:id="@+id/TextView03"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_weight="1"
             android:gravity="center"
             android:padding="20dip"
             android:text="블로그"
             android:textColor="#000000" />
       
    </LinearLayout>       
   
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="5"
        >     
   
        <WebView
            android:id="@+id/webview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"           
            android:scrollbars="none"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:adjustViewBounds="true"
            android:scaleType="fitStart"           
            />         
   
    </LinearLayout>
   
</LinearLayout>


3. 퍼미션 설정


4. WebView 코딩과정

package com.example.mywebview;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;

public class MainActivity extends Activity {
    private WebView mWebView;
    private TextView TextView01;
    private TextView TextView02;

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


        // ActionBar 제거하기
        ActionBar actionbar = getActionBar();
        actionbar.hide();   


        setLayout("http://link2me.tistory.com"); // default webview       
       
        TextView01 = (TextView) findViewById(R.id.TextView01);
        TextView02 = (TextView) findViewById(R.id.TextView02);       
       
        TextView01.setOnClickListener(onclick1);
        TextView02.setOnClickListener(onclick2);
        findViewById(R.id.TextView03).setOnClickListener(onclick3);  // 이런 방법으로도 가능하다는 거      
    }
   
    OnClickListener onclick1 =new OnClickListener() {
        @Override
        public void onClick(View v) {
            String url = "http://www.tistory.com";
            setLayout(url);           
        }       
    };
   
    OnClickListener onclick2 =new OnClickListener() {
        @Override
        public void onClick(View v) {
            String url = "http://m.naver.com";
            setLayout(url);           
        }       
    };
   
    OnClickListener onclick3 =new OnClickListener() {
        @Override
        public void onClick(View v) {
            String url = "http://link2me.tistory.com";
            setLayout(url);           
        }       
    };

    @SuppressLint("SetJavaScriptEnabled")
    private void setLayout(String url) {
        mWebView = (WebView) findViewById(R.id.webview);
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.setWebViewClient(new WebViewClient()); // 이걸 안해주면 새창이 뜸
        mWebView.loadUrl(url);
    }
       
}


화면 확대 축소 옵션

webView.getSettings().setBuiltInZoomControls(true);
webView.setDisplayZoomControls(false);


버튼 또는 TextView 를 클릭하면 다른 Activity 로 이동하게 하고 싶은 경우

이 부분에서 에러가 발생한다.

<check_framebuffer_attachment:854>: Invalid texture format! Returning error!

검색해도 해결책을 구할 수가 없다.


OnClickListener onclick2 =new OnClickListener() {
        @Override
        public void onClick(View v) {
            //switch(v.getId()){
                //case R.id.TextView02:
                    Toast.makeText(getApplicationContext(), "네이버 사이트로 이동합니다.", Toast.LENGTH_LONG).show();
                    Intent intent = new Intent(MainActivity.this, ButtonActivity.class);
                    startActivity(intent);
                    //break;
            //}
        }       
    };


이렇게 주석처리를 해가면서 해보니 Toast 메시지만 출력하는 것은 문제가 안된다.

그 다음 Intent 처리하는 부분에서 잘못된거 같은데 아직 왜 그러는지 원인을 모르겠다.


안드로이드 OnClick 메소드에 대해 설명이 잘된 사이트

http://nanstrong.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EA%B0%95%EC%9D%9807-AndroidOnClick%EB%A5%BC-%EA%B5%AC%ED%98%84%ED%95%98%EB%8A%94-4%EA%B0%80%EC%A7%80-%EB%B0%A9%EB%B2%95



OnClickListener 메소드 부분은 아래와 같이 다시 보완했다.(2016-06-19 일)

ButtonActivity.java 와 button.xml 파일을 생성해서 테스트를 해봤더니 Intent 로 화면이 전환되는 것을 확인했다.

개념이 부족한 상태에서 화면을 복사해서 대략 붙여넣기하면서 수정을 했더니 뭔가 꼬인 부분이 있는거 같다.

아직 Layout 만들고 화면에 불러서 처리하는 부분에 대한 지식이 부족해서인가 보다.


.setJavaScriptEnabled - 웹뷰에서 자바 스크립트 사용
.setSupportZoom - 손으로 확대, 축소를 할 수 있도록 사용
.setBuiltInZoomControls - WebView 내장 Zoom 사용
.onPageStarted() - 웹뷰에서 url이 로드 될때 호출 되는 함수
.onPageFinished() - 웹뷰에서 url 로딩이 완료되면 호출 되는 함수
WebViewClient의 shouldOverrideUrlLoading 함수는 웹뷰 내에서 웹 페이지를 돌아다니기 위해서 사용
.onJSAlert() -  웹에서 띄우는 팝업 창 같은 것을 웹뷰에서 보여주기 위해 사용



블로그 이미지

Link2Me

,