** 개인적 메모입니다. 태클 사절 **
안드로이드 java source
===================================================================================================
package com.example.webview;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Vibrator;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import com.example.R;
public class WebViewDemo extends Activity {
WebView webview;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Windows 의 속성 변경은 꼭 setContentView 이전에 해주어야 한다.
//설정사항 - no title, full screen, 가로/세로 고정, custom title
//내장 progress 지원(title 바에 위치됨)
requestWindowFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.webview_demo_main);
Button bt = (Button)findViewById(R.id.bt);
webview = (WebView)findViewById(R.id.webview);
bt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// javascript function call
webview.loadUrl("javascript
}
});
WebSettings settings = webview.getSettings();
settings.setJavaScriptEnabled(true);
settings.setBuiltInZoomControls(true);
// flash 지원하려면
//settings.setPluginsEnabled(true);
// javascript에게 공개할 클래스와 그 클래스의 공개명칭
webview.addJavascriptInterface(new JavascriptInterfaceTest(),"android");
webview.loadUrl("http://");
//webview의 유저 이벤트
webview.setWebViewClient(new WebViewClient(){
// 유저가 클릭하는 순간의 링크 이벤트, 사용자가 추가적인 데이터를 넣으려 할 때도 쓰임
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
Log.d("maluchi", "url: "+url);
view.loadUrl("http://m.naver.com");
return true;
//return super.shouldOverrideUrlLoading(view, url);
}
});
webview.setWebChromeClient(new MyWebChromeClient());
}
//key event 처리, onKeyUp/Down
//만약 back key만 처리하겠다면 onBackPressed 메서드를 이용할 수 있다.
//하지만 둘을 같이 선언 할 수 없다.
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode == KeyEvent.KEYCODE_BACK && webview.canGoBack())
{
webview.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
// javascript에서는 java 에서 공개한 객체의 메서드만 호출한다.
// javascript에게 공개할 클래스
public class JavascriptInterfaceTest{
public void vibration()
{
Vibrator vib = (Vibrator)WebViewDemo.this.getSystemService(Context.VIBRATOR_SERVICE);
vib.vibrate(500);
//vib.vibrate(new long[]{1000,1000,1000}, 0);
}
}
// 브라우저 자체의 이벤트 핸들러 클래스
public class MyWebChromeClient extends WebChromeClient
{
// 페이지 로딩 상태 변화시 호출, 수시로 호출된다.
@Override
public void onProgressChanged(WebView view, int newProgress) {
// TODO Auto-generated method stub
// 모든 Activity는 자체 Progress를 가지고 있다.
WebViewDemo.this.setProgress(newProgress*100); // 값의 차이가 100차이라서 곱함
//super.onProgressChanged(view, newProgress);
}
}
}
xml 레이아웃
===================================================================================================
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<WebView
android:id="@+id/webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
/>
<Button
android:id="@+id/bt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Call JavaScript"
/>
</LinearLayout>
test html
===================================================================================================
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=euc-kr">
<script language="javascript">
function vibration(){
// javascript->java method
window.android.vibration();
}
function fromApp()
{
// java method -> javascript
alert('call to javascript');
}
</script>
<title>안드로이드 데모 - 자바스크립트 호출페이지</title>
</head>
<body>
<h2>WebView Test</h2>
<br />
<br />
<a href="http://www.google.com">go to google</a>
<br />
<br />
<input type="button" value="vibrate" onClick="javascript
</body>
</html>
'Program > Android' 카테고리의 다른 글
Android - 안드로이드의 파일 입출력 경로 얻기(커니님의 글) (0) | 2011.12.06 |
---|---|
Android - Activity Life Cycle (0) | 2011.12.05 |
Task or Stack (1) | 2011.11.07 |
굴욕...BaseLayout Custom (6) | 2011.10.29 |
동적 뷰 추가하기 (2) | 2011.10.29 |