안드로이드(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 |