WebView 구성 및 웹 매개 변수 전달
14252 단어 개인 노트
package com.fryp.frnewweb.web;
import android.content.Context;
import android.os.Build;
import android.util.AttributeSet;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebSettings.RenderPriority;
import android.webkit.WebView;
import java.lang.reflect.Method;
public class SGWebView extends WebView {
public SGWebView(Context context) {
super(context);
init();
}
public SGWebView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public SGWebView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init() {
requestFocusFromTouch();
setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
// javascript
this.getSettings().setJavaScriptEnabled(true);
// 。
this.requestFocusFromTouch();
this.getSettings().setDefaultTextEncodingName("UTF-8");
this.getSettings().setRenderPriority(RenderPriority.HIGH);
this.getSettings().setAllowFileAccess(true);
//
this.getSettings().setSupportZoom(false);
this.getSettings().setLoadsImagesAutomatically(true);
// this.getSettings().setPluginsEnabled(true);
//
this.getSettings().setUseWideViewPort(true);
//
this.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
this.getSettings().setLoadWithOverviewMode(true);
// , , ,
this.getSettings().setBlockNetworkImage(true);
//
this.getSettings().setAppCacheEnabled(true);
if (Integer.parseInt(Build.VERSION.SDK) < 11) {
this.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
} else {
this.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
}
}
@SuppressWarnings("rawtypes")
@Override
public void destroy() {
try {
Class localClass = super.getClass();
Method localMethod = localClass.getMethod("freeMemory", new Class[0]);
localMethod.invoke(this, new Object[0]);
super.destroy();
return;
} catch (Exception e) {
e.printStackTrace();
}
}
}
위의 코드에서 WebView의 일부 통용되는 속성을 설정한 것이다. 보기 편리하도록 나는 여기에서 WebView의 설정을 찾았고 주석을 붙여서 보기 편리하게 했다. 기본적으로 어떤 속성이 필요한지 주로 자신의 수요를 보아야 한다. 상기 코드의 설정은 기본적으로 충분하다.http://www.tuicool.com/articles/zy263q http://www.th7.cn/Program/Android/201211/110963.shtml
2. WebView를 초기화하면 이전에 상속 WebView를 썼다고 생각하고 사용할 때 SGWebView를 사용합니다
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black_p50"
android:orientation="vertical">
<com.fryp.frnewweb.web.SGWebView
android:id="@+id/main_webview"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
LinearLayout>
다음은 Activity나 Fragment의 주요 코드입니다. 저는 여기에 모든 코드를 먼저 붙인 다음에 따로 설명해 드리겠습니다.
public void initViews() {
mainWebview.setWebViewClient(new MyWebViewClient());
mainWebview.setWebChromeClient(new MyWebChromeClient());
// mainWebview.setWebChromeClient(new WebChromeClientUtil(getActivity(), handler));
mainWebview.addJavascriptInterface(new JsToBrowser(getActivity(), handler), "local_obj");
mainWebview.loadUrl("http://www.xianhua.com.cn/m/");
}
class MyWebChromeClient extends WebChromeClient {
@Override
public void onProgressChanged(WebView view, int newProgress) {
//
// if (SimpleHUD.hud != null) {
// SimpleHUD.hud.setProgress(newProgress);
// SimpleHUD.hud.setDetailsLabel(newProgress + "%");
// }
super.onProgressChanged(view, newProgress);
}
}
final class MyWebViewClient extends WebViewClient {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.d("WebView", "shouldOverrideUrlLoading");
view.loadUrl(url);
return true;
}
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// SimpleHUD.showProgressLoading(getActivity(), KProgressHUD.Style.PIE_DETERMINATE);
Log.d("WebView", "onPageStarted");
Log.d("WebView", "url=="+url);
nowUrl=url;
super.onPageStarted(view, url, favicon);
}
public void onPageFinished(WebView view, String url) {
Log.d("WebView", "onPageFinished ");
// ,“fudong” “xiazaiapp” id
view.loadUrl("javascript:window.local_obj.remove(document.getElementById('fudong').remove());");
view.loadUrl("javascript:window.local_obj.remove(document.getElementById('xiazaiapp').remove());");
// , javascript “h1” 。
view.loadUrl("javascript:window.local_obj.remove(document.getElementsByTagName('h1')[0].innerHTML=' ');");
// SimpleHUD.dismiss();
super.onPageFinished(view, url);
}
}
public Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case 1://
Toast.makeText(getActivity(), " ", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
};
상호작용을 할 때 쓰는 종류.
package com.fryp.frnewweb.web;
import android.content.Context;
import android.os.Handler;
import android.util.Log;
import android.webkit.JavascriptInterface;
public class JsToBrowser {
private Handler handler;
Context mContext;
public JsToBrowser(Context m,Handler h) {
mContext=m;
handler=h;
}
//javascript
@JavascriptInterface
public void remove(String html){
Log.d("HTML", html);
}
}
자, 코드를 다 붙이고 사용만 하면 되는 학생에게 직접 붙이면 됩니다.다음은 코드의 내용을 분석하고 간단하게 알아보겠습니다.우선 초보적으로 배치된 것들은 설명하지 않겠습니다.직접 포인트 1,mainWebview.setWebViewClient(new MyWebViewClient()); WebView Client를 설정할 때 주로 다음과 같은 코드에서 다시 쓰는 방법을 볼 수 있다. shouldOverrideUrlLoading onPageStarted onPageFinished는 처음 웹 페이지에 들어갈 때 onPageStarted에만 들어가고 onPageFinished에 들어간 다음에 들어갈 때는 다음과 같다. shouldOverrideUrlLoading onPageStarted onPageFinished, 들어가는 방법의 순서도 마찬가지다.따라서 우리가 웹 페이지의 내용을 바꾸어야 할 때, 웹 페이지가 불러오기를 기다려야 한다. 즉, onPage Finished가 유사한view를 쓴다.loadUrl(“javascript:window.local_obj.remove(document.getElementById(‘fudong’).remove());”);를 입력합니다.그렇지 않으면 빈손가락 이상을 보고할 것이다.2、 mainWebview.addJavascriptInterface(new JsToBrowser(this, handler), “local_obj”); 웹 페이지의 상호작용을 하려면 반드시 웹 페이지가 클라이언트를 호출하는 방법이 없어서는 안 된다.local_obj는 자신이 쓴 유사한 웹 페이지에서 호출해야 하는 인터페이스입니다.remove는 이 인터페이스에 호출하는 방법과 유사합니다.물론 방법은 스스로 정의한 것이고, add (string str) 와 같은 지정한 매개 변수를 전달할 수도 있다.
총괄: 이런 내용에 관해서는 자신이 아직 깊이 이해하지 못했기 때문에 코드를 복사해서 붙이는 것만 알려줄 수 있습니다. 왜냐고 묻지 마세요.어떤 것들은 정말 이유가 없다.만약 네가 자신이 아직 풋내기라고 생각한다면, 그 문제들을 더욱 깊이 체득할 필요가 없다.'책을 백 번 읽으면 그 뜻이 저절로 보인다'는 말이 있듯이.이치는 모두 쓸 수 있다.몇 번 더 두드리면 그 뜻이 저절로 보인다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Lua의 몇 가지 계산 공식텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.