Please Enable JavaScript!
Gon[ Enable JavaScript ]

안드로이드(Android) WebView 이용해 브라우저구현과 메뉴구현

안드로이드 개발
반응형

안드로이드(Android) WebView 이용해 브라우저구현과 메뉴구현

 

개발환경 : window 7 64bit, Eclipse Mars, Android 4.2.2

 

WebView 를 통해서 브라우저와 웹브라우저 처럼 동일한

기능을 구현하기 위해 옵션메뉴를 사용하였습니다.

아래 그림과 같이 옵션을 클릭하게 되면 브라우저와

동일하게 앞으로, 뒤로, Exit 등이 있습니다.

 

 

먼저 브라우저기능을 위해 WebView 객체를 만듭니다.

URL 이동을 위해 loadUrl() 함수를 사용하고

Javascript 이 기능할수 있도록

getSettings().setJavaScriptEnabled(true) 이용합니다.

 

String myURL = "http://mainia.tistory.com";
myBrowser = (WebView) findViewById(R.id.mybrowser);

myBrowser.getSettings().setJavaScriptEnabled(true);
myBrowser.setWebViewClient(new WebViewClient());

myBrowser.loadUrl(myURL);

 

옵션메뉴 구현을 위해 onCreateOptionMenu 

Override 합니다. 그곳에 앞으로, 뒤로 등을 만듭니다.

 

@Override
public boolean onCreateOptionsMenu(Menu menu) {
	menu.add(0, MENU_GOTO, 0, R.string.str_Goto);
	menu.add(0, MENU_ABOUT, 0, R.string.str_About);
	menu.add(0, MENU_EXIT, 0, R.string.str_Exit);
	menu.add(0, MENU_BACKFORD, 0, R.string.str_Backward);
	menu.add(0, MENU_RELOAD, 0, R.string.str_Reload);
	menu.add(0, MENU_FORWARD, 0, R.string.str_Forward);

	return super.onCreateOptionsMenu(menu);
}

 

위에서 만든 옵션메뉴를 선택했을 때 실행되는

함수 입니다. Switch case 를 이용해 선택한

옵션에 대한 함수를 실행 하게 됩니다.

보시면 WebView 에 함수로 다 지원이 가능합니다.

 

@Override
public boolean onOptionsItemSelected(MenuItem item) {
	// TODO Auto-generated method stub
	super.onOptionsItemSelected(item);

	switch (item.getItemId()) {
	case MENU_GOTO:
		openGotoDialog();
		break;
	case MENU_ABOUT:
		openAboutDialog();
		break;
	case MENU_EXIT:
		openExitDialog();
		break;
	case MENU_BACKFORD:
		if (myBrowser.canGoBack())
			myBrowser.goBack();
		break;
	case MENU_RELOAD:
		myBrowser.reload();
		break;
	case MENU_FORWARD:
		if (myBrowser.canGoForward())
			myBrowser.goForward();
		break;
	}
	return true;
}

 

옵션메뉴의 번호는 상단에서 오른쪽으로 가면

번호가 증가 하게 됩니다. 그 번호를 선언해 놓고

사용합니다.

 

final int MENU_GOTO = 0;
final int MENU_ABOUT = 1;
final int MENU_EXIT = 2;
final int MENU_BACKFORD = 3;
final int MENU_RELOAD = 4;
final int MENU_FORWARD = 5;

 

인터넷 브라우저를 위한 메인 Activity 입니다.

 

SampleActivity5.java

 

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class SampleActivity5 extends Activity {

	final int MENU_GOTO = 0;
	final int MENU_ABOUT = 1;
	final int MENU_EXIT = 2;
	final int MENU_BACKFORD = 3;
	final int MENU_RELOAD = 4;
	final int MENU_FORWARD = 5;

	WebView myBrowser;

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

		String myURL = "http://mainia.tistory.com";
		myBrowser = (WebView) findViewById(R.id.mybrowser);
		
		myBrowser.getSettings().setJavaScriptEnabled(true);
		myBrowser.setWebViewClient(new WebViewClient());

		myBrowser.loadUrl(myURL);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		menu.add(0, MENU_GOTO, 0, R.string.str_Goto);
		menu.add(0, MENU_ABOUT, 0, R.string.str_About);
		menu.add(0, MENU_EXIT, 0, R.string.str_Exit);
		menu.add(0, MENU_BACKFORD, 0, R.string.str_Backward);
		menu.add(0, MENU_RELOAD, 0, R.string.str_Reload);
		menu.add(0, MENU_FORWARD, 0, R.string.str_Forward);

		return super.onCreateOptionsMenu(menu);
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {

		super.onOptionsItemSelected(item);

		switch (item.getItemId()) {
		case MENU_GOTO:
			openGotoDialog();
			break;
		case MENU_ABOUT:
			openAboutDialog();
			break;
		case MENU_EXIT:
			openExitDialog();
			break;
		case MENU_BACKFORD:
			if (myBrowser.canGoBack())
				myBrowser.goBack();
			break;
		case MENU_RELOAD:
			myBrowser.reload();
			break;
		case MENU_FORWARD:
			if (myBrowser.canGoForward())
				myBrowser.goForward();
			break;
		}
		return true;
	}

	private void openGotoDialog() {
		Intent intent = new Intent();
		intent.setClass(SampleActivity5.this, BrowserTool.class);

		startActivityForResult(intent, 0);

	}

	private void openAboutDialog() {
		new AlertDialog.Builder(this)
				.setTitle(R.string.str_About)
				.setMessage(R.string.str_about_message)
				.setPositiveButton(R.string.str_ok,
						new DialogInterface.OnClickListener() {
							public void onClick(
									DialogInterface dialoginterface, int i) {
							}
						}).show();
	}

	private void openExitDialog() {
		new AlertDialog.Builder(this)
				.setTitle(R.string.str_Exit)
				.setMessage(R.string.str_exit_message)
				.setNegativeButton(R.string.str_no,
						new DialogInterface.OnClickListener() {
							public void onClick(
									DialogInterface dialoginterface, int i) {
							}
						})
				.setPositiveButton(R.string.str_ok,
						new DialogInterface.OnClickListener() {
							public void onClick(
									DialogInterface dialoginterface, int i) {
								finish();
							}
						}).show();
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		if (requestCode == 0) {
			switch (resultCode) {
			case RESULT_OK:
				String gotourl = data.getStringExtra("url");
				myBrowser.loadUrl(gotourl);
				break;
			case RESULT_CANCELED:
				break;

			}
		}
	}
}

 

메인 Activity 를 표현하기 위한 레이아웃 입니다.

 

activity_sample_activity5.xml

 

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

    <WebView
        android:id="@+id/mybrowser"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

</LinearLayout>

 

Resources 문자열 xml 입니다.

 

strings.xml

 

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>
    <string name="hello">Hello~~</string>
    <string name="title_activity_samplectivity1">Samplectivity1</string>
    <string name="title_activity_sample_activity1">SampleActivity1</string>
    <string name="title_activity_sample_activity2">SampleActivity2</string>
    <string name="title_activity_sample_activity3">SampleActivity3</string>
    <string name="title_activity_sample_activity4">SampleActivity4</string>
    <string name="title_activity_sample_activity5">SampleActivity5</string>

	<string name="app_name">Android Browser</string>
	<string name="str_about_message">Android Browser</string>
	<string name="str_exit_message">Exit?</string>
	<string name="str_ok">OK</string>
	<string name="str_no">No</string>
	<string name="str_URL">URL:</string>
	<string name="str_Goto">Go to</string>
	<string name="str_About">About</string>
	<string name="str_Exit">Exit</string>
	<string name="str_Backward">back</string>
	<string name="str_Reload">Reload</string>
	<string name="str_Forward"></string>
    
</resources>

 

 

 

또 하나의 클래스는 GO TO 를 눌렀을 때 URL 바로가기를

할수 있는 화면구성과 소스 입니다.

Url 박스에 주소를 넣게 되면 아래 함수가 실행 되게 되며

메인 Activity URL 을 넘기게 됩니다.

 

private Button.OnClickListener gotoOnClickListener = new Button.OnClickListener() {
	public void onClick(View v) {
		Intent intent = new Intent();
		Bundle bundle = new Bundle();

		String targetURL = gotoURL.getText().toString();
		bundle.putString("url", targetURL);
		intent.putExtras(bundle);
		setResult(RESULT_OK, intent);
		finish();
	}
};

 

넘어간 URL 을 메인 Activity onActivityResult 함수를

실행하고 loadUrl() 함수를 실행하여 페이지로 이동합니다.

 

@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		if (requestCode == 0) {
			switch (resultCode) {
			case RESULT_OK:
				String gotourl = data.getStringExtra("url");
				myBrowser.loadUrl(gotourl);
				break;
			case RESULT_CANCELED:
				break;

			}
		}
	}

 

URL 이동을 위한 입력화면소스 입니다.

 

BrowserTool.java

 

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class BrowserTool extends Activity {

	Button gotoButton, cancelButton;
	EditText gotoURL;

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

		gotoURL = (EditText) findViewById(R.id.gotourl);
		gotoButton = (Button) findViewById(R.id.gotoButton);
		gotoButton.setOnClickListener(gotoOnClickListener);
		cancelButton = (Button) findViewById(R.id.cancelgotoButton);
		cancelButton.setOnClickListener(cancelgotoOnClickListener);
	}

	private Button.OnClickListener gotoOnClickListener = new Button.OnClickListener() {
		public void onClick(View v) {
			Intent intent = new Intent();
			Bundle bundle = new Bundle();

			String targetURL = gotoURL.getText().toString();
			bundle.putString("url", targetURL);
			intent.putExtras(bundle);
			setResult(RESULT_OK, intent);
			finish();
		}
	};
	private Button.OnClickListener cancelgotoOnClickListener = new Button.OnClickListener() {
		public void onClick(View v) {
			setResult(RESULT_CANCELED);
			finish();
		}
	};
}

 

BrowserTool.java 를 표현하기 위한 레이아웃입니다.

 

panel.xml

 

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

    <TextView
        android:id="@+id/mybrowser"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Enter the URL:" />

    <EditText
        android:id="@+id/gotourl"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="http://" />

    <Button
        android:id="@+id/gotoButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="OK" />

    <Button
        android:id="@+id/cancelgotoButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="CANCEL" />

</LinearLayout>

 

 

반응형
Posted by 녹두장군1
,