|
안드로이드(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>
'안드로이드 개발' 카테고리의 다른 글
| 안드로이드(Android) 간단한 스레드 사용법과 숫자값 올리기 (0) | 2014.10.27 |
|---|---|
| 안드로이드(Android) 아날로그 시계의 시간을 음성(TTS) 으로 알려주기 (3) | 2014.10.27 |
| 안드로이드(Android) 간단하게 TTS(Text-To-Speech) 구현하기 (8) | 2014.10.26 |
| 안드로이드(Android) WebView 브라우저기능중 URL 이동바 구현 (0) | 2014.10.26 |
| 안드로이드(Android) 스마트 폰에 모든 시스템 정보 알아보기 (1) | 2014.10.25 |
| 안드로이드(Android) CPU 버전 알아오기 (0) | 2014.10.24 |
| 안드로이드(Android) 2014년 9월 까지 플랫폼 버전과 화면해상도 분포 (0) | 2014.10.24 |
| 안드로이드(Android) OS 버전과 시스템정보 알아오기 (0) | 2014.10.23 |
