WebView의 간편한 패키지 정보
일상적인 개발 과정에서 우리는 WebView를 사용하여 HTML 페이지를 자주 불러온다. 샤오지가 최근에 한 두 프로젝트 중 HTML 파일을 불러와야 한다. 프로젝트 중 여러 곳에서 웹뷰를 사용했는데 봉인하지 않으면 코드량이 엄청날 것이다.정치책의 한 마디를 빌려 쓰면서 양적 변화가 없는데 어떻게 질적 변화가 있을 수 있겠는가?포장해 봤어요.
개관
Android WebView는 웹 페이지를 불러오는 캐리어 컨트롤러로 웹 페이지를 표시하는 과정에서 이벤트가 발생하여 웹 페이지를 불러오는 과정에서 프로그램이 처리하고자 하는 일을 할 수 있도록 프로그램에 리셋합니다.예를 들어 클라이언트는 웹 페이지 불러오는 진도, 웹 페이지 불러오는 오류 등 이벤트를 표시해야 한다.WebView는 두 개의 이벤트 리셋 클래스를 응용 층에 제공하는데 그것이 바로 WebView Client이다. WebChromeClient 개발자는 이 두 가지 클래스를 계승하여 해당하는 이벤트 처리를 인수할 수 있다.웹뷰 클라이언트는 주로 웹 페이지가 각 단계에 대한 알림을 제공한다. 예를 들어 웹 페이지가 onPageStarted를 불러오기 시작하고 웹 페이지가 onPageFinished를 불러오기 시작하는 등이다.웹크롬 클라이언트는 웹 페이지를 불러오는 과정에서 제공하는 데이터 내용을 주로 제공한다. 예를 들어 웹 페이지의 title,favicon 등을 되돌려준다.
WebView의 기본 사용
저도 소개를 많이 안 할게요. 코드를 소개해 주세요.
@Override
protected void initView() {
WebSettings webSettings = mWebView.getSettings();
// , 、
mWebView.requestFocusFromTouch();
mWebView.setOverScrollMode(View.OVER_SCROLL_NEVER);
webSettings.setJavaScriptEnabled(true); // js
// webSettings.setPluginsEnabled(true); //
// webSettings.setPluginState(WebSettings.PluginState.ON);
// ,
webSettings.setUseWideViewPort(true); // webview
webSettings.setLoadWithOverviewMode(true); //
//webSettings.setSupportZoom(true); // , true。 。
//webSettings.setBuiltInZoomControls(true); // 。
// false, WebView , 。
webSettings.setDisplayZoomControls(false); //
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); //
webSettings.supportMultipleWindows(); //
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); // webview
webSettings.setAllowFileAccess(true); //
webSettings.setNeedInitialFocus(true); // webview requestFocus webview
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); // JS
webSettings.setLoadsImagesAutomatically(true); //
webSettings.setDefaultTextEncodingName("utf-8");//
mWebView.addJavascriptInterface(new ToastCallbacker(), "callbacker");
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
String token = AccountManager.getInstance().getAccessToken();
Map extraHeaders = new HashMap<>();
extraHeaders.put("CH-TOKEN", token);
view.loadUrl(url, extraHeaders);
return true;
}
});
/*WebViewClient mWebViewClient = new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// , 。
// , 。
// url, url.contains(“add”),
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event) {
// 。
return super.shouldOverrideKeyEvent(view, event);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// , loading , 。
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
// 。 , loading , 。
super.onPageFinished(view, url);
view.loadUrl("javascript:myFunction()");
}
@Override
public void onLoadResource(WebView view, String url) {
// , ( ) 。
super.onLoadResource(view, url);
}
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
// ( )
super.onReceivedError(view, request, error);
}
@Override
public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) {
//( )
super.doUpdateVisitedHistory(view, url, isReload);
}
@Override
public void onFormResubmission(WebView view, Message dontResend, Message resend) {
//( )
super.onFormResubmission(view, dontResend, resend);
}
@Override
public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
//( )
super.onReceivedHttpAuthRequest(view, handler, host, realm);
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
// webview https 。
super.onReceivedSslError(view, handler, error);
}
@Override
public void onScaleChanged(WebView view, float oldScale, float newScale) {
// (WebView )
super.onScaleChanged(view, oldScale, newScale);
}
@Override
public void onUnhandledInputEvent(WebView view, InputEvent event) {
//(Key )
super.onUnhandledInputEvent(view, event);
}
};
mWebView.setWebViewClient(mWebViewClient);*/
WebChromeClient mWebChromeClient = new WebChromeClient() {
// , TextView
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress < 100) {
String progress = newProgress + "%";
} else {
}
}
// Web title title
// , , onReceiveTitle ,
// onReceiveError , title
@Override
public void onReceivedTitle(WebView view, String title) {
//WebActivity.this.setTitle(title);
}
@Override
public void onReceivedIcon(WebView view, Bitmap icon) {
//
}
@Override
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
//
return true;
}
@Override
public void onCloseWindow(WebView window) {
}
// alert ,html
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
//
return true;
}
// confirm
@Override
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue,
JsPromptResult result) {
//
return true;
}
// prompt
@Override
public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
//
return true;
}
};
mWebView.setWebChromeClient(mWebChromeClient);
}
WebView에 대한 기본 설정 public class ToastCallbacker extends WebActivity {
@JavascriptInterface
public void showToast(final String msg) {
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
Toast.makeText(WebActivity.this, msg, Toast.LENGTH_LONG).show();
}
});
}
@JavascriptInterface
public void LoginToast() {
LoginActivity.start();
}
@JavascriptInterface
public void registerToast() {
SignUpActivity.startSignUp();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
//System.exit(0);
}
우리는 앱 공유를 할 때 웹뷰를 공유하여 음악 재생 컨트롤이 있는 웹 페이지를 불러옵니다.공유 인터페이스가 뜨면 웹뷰의 웹 페이지가 백엔드 상태에 있거나 닫힐 때 음악 소리가 재생됩니다.이런 현상이 나타나면 우리는 용납할 수 없고 사용자에게도 좋지 않은 인상을 줄 수 있다. 인터넷에는 몇 가지 해결 방법이 있지만 모두 뜻대로 되지 않는 부분이 있다. 오늘 우리는 그것을 어떻게 더 잘 해결할 수 있는지 이야기하자.솔루션:
@Override
protected void onPause() {
mWebView.reload();//
super.onPause();
}
이렇게 하면 WebView에 대한 설정이 완성되었지만, 단지 이렇게 해서는 안 된다. 우리가 불러온 HTML은 어떤 것은 네트워크에 있고, 어떤 것은 로컬이기 때문에 받아들인 데이터도 처리해야 한다.먼저 점프 방법을 봅시다.
private static final String KEY_TITLE = "title";
private static final String KEY_FILE = "file";
public static final Pair ABOUT = Pair.create(" ", "file:///android_asset/about.html");
public static final Pair PROTOCOL = Pair.create(" ", "file:///android_asset/protocol.html");
public static final Pair PRIVATE = Pair.create(" ", "file:///android_asset/copyright.html");
public static final Pair COMMON_QUESTION =
new Pair<>(" ", "file:///android_asset/commonQuestion.html");
public static void start(Pair pair) {
Intent intent = new Intent(AppUtils.getAppContext(), WebActivity.class);
intent.putExtra(KEY_TITLE, pair.first);
intent.putExtra(KEY_FILE, pair.second);
AppUtils.startActivity(intent);
}
@Override
protected void initData() {
Intent intent = getIntent();
String title = intent.getStringExtra(KEY_TITLE);
String file = intent.getStringExtra(KEY_FILE);
mTvTitle.setText(title);
mWebView.loadUrl(file);
}
이렇게 큰일이 났다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.