Android 혼합 개발 튜 토리 얼 의 WebView 사용 방법 요약

선언:
오늘 수정 항목 에서 WebView 사용 에 관 한 bug 는 제 가 WebView 를 정리 하 는 동 기 를 불 러 일 으 켰 습 니 다.오늘 시간 을 내 서 정 리 를 하 겠 습 니 다.
간단 한 소개
WebView 는 웹 kit 엔진 을 기반 으로 웹 페이지 를 보 여 주 는 컨트롤 입 니 다.
안 드 로 이 드 의 웹 뷰 는 낮은 버 전과 높 은 버 전에 서 서로 다른 웹 킷 버 전 커 널 을 사 용 했 고 4.4 후 크롬 을 직접 사용 했다.
역할.
  • 웹 페이지 를 표시 하고 렌 더 링 합 니 다
  • html 파일(네트워크 또는 로 컬 assets 중)을 직접 사용 하여 레이아웃 을 만 듭 니 다
  • 자 바스 크 립 트 와 상호작용 할 수 있 습 니 다
  • WebView 컨트롤 기능 이 강하 고 일반 View 의 속성 과 설정 을 제외 하고 url 요청,페이지 로드,렌 더 링,페이지 상호작용 을 강력 히 처리 할 수 있 습 니 다.

    혼합 개발 관련 블 로그:
  • Android 혼합 개발 의 WebView 사용 총화
  • Android 혼합 개발 의 WebView 와 Javascript 의 상호작용
  • 사용 필드:
     1.)권한 추가
    
    <uses-permission android:name="android.permission.INTERNET" /> 
     2.)레이아웃 파일
    
     <WebView
     android:id="@+id/webView"
     android:layout_width="match_parent"
     android:layout_height="match_parent" />
     3.)데이터 로드
     로 컬 자원 불 러 오기
    
    webView.loadUrl(file:///android_asset/example.html);
     네트워크 자원 불 러 오기
    
    webView.loadUrl(www.xxx.com/index.html);
     요청 헤더 정보 추가
    
    Map<String,String> map=new HashMap<String,String>();
    map.put("User-Agent","Android");
    webView.loadUrl("www.xxx.com/index.html",map);
    html 세 션 도 불 러 올 수 있 습 니 다.
    
     String data = " Html   ";
     webView.loadData(data, "text/html", "utf-8");
    실측 을 통 해 loadData 가 중국어 코드 를 어 지 럽 히 는 것 을 발견 할 수 있 기 때문에 일반적인 상황 에 서 는 다음 과 같은 코드 를 사용 합 니 다.
    
    String data = " Html   ";
    webView.loadDataWithBaseURL(null,data, "text/html", "utf-8",null);
    4.)자 바스 크 립 트 지원
         예 를 들 어 프로젝트 총 js 가 native 함수 로 Activity 를 닫 습 니 다.
        자 바스 크 립 트 지원 설정
    
     WebSettings webSettings = webView.getSettings();
     webSettings.setJavaScriptEnabled(true);//    javascript
     webView.addJavascriptInterface(new JavaScriptInterface(), "xueleapp");
     JavaScriptInterface 인터페이스 정의
    
    public class JavaScriptInterface {
     @android.webkit.JavascriptInterface
     public void doTrainFinish() {
     finish();
     }
     }
    5.WebViewClient 를 설정 하여 각종 알림,요청 이 벤트 를 처리 하 는 데 도움 을 줍 니 다.
    예 를 들 어 WebView 에서 링크 가 WebView 내부 로 이동 하 는 것 을 실현 하려 면
    
    webView.setWebViewClient(new WebViewClient() {
     public boolean shouldOverrideUrlLoading(WebView view, String url) {
     view.loadUrl(url);
     return true;
     }
     });
    그 밖 에 WebViewClient 는 웹 페이지 의 주소 분석 과 렌 더 링 을 더 많이 처리 합 니 다.예 를 들 어
          onLoadResource//자원 불 러 올 때 응답
    페이지 를 불 러 올 때 응답
    onPageFinish//로 딩 페이지 가 끝 날 때 응답
    onReceiveError//불 러 오 는 중 오류 가 발생 했 을 때 응답 합 니 다.
    onReceivedHttpAuthRequest//반환 정보 권한 부여 요청 가 져 오기
      6.)WebChromeClient 의 주요 보조 WebView 처리 Javascript 대화 상자,사이트 아이콘,사이트 title,로드 진도 등 을 설정 합 니 다.
       예 를 들 어 로 딩 진도 가 져 오기 title
    
    webView.setWebChromeClient(new WebChromeClient() {
     @Override
     public void onProgressChanged(WebView view, int newProgress) {
     if (newProgress == 100) {
      //      
     } else {
      //     
     }
     }
     });
    위 에서 진 도 를 측정 하 는 것 외 에 도
    onCloseWindow//WebView 닫 기
    onCreateWindow()//새 창 만 들 기 실행
    onJSAlert//팝 업 대화 상자 터치
    onJSPrompt//팝 업 알림 을 터치 합 니 다.
    onJSConfirm//팝 업 확인 알림 터치
    onProgressChanged//로 딩 진도
    onReceivedIcon//웹 아이콘 가 져 오기
    onReceivedTitle//웹 페이지 제목 가 져 오기
     7.)홈 페이지 창 고 를 다시 설정
        웹 뷰 는 과거 웹 페이지 를 훑 어 보 는 것 을 기본적으로 저장 하기 때문에,우 리 는 때때로 이전 디 렉 터 리 로 되 돌려 야 한다
    
    @Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
     if (keyCode == KeyEvent.KEYCODE_BACK) {
     if (webView.canGoBack()) {
     webView.goBack();//        
     return true;
     } else {
     finish();//  Activity
     }
     }
     return super.onKeyDown(keyCode, event);
     }
    8.)WebView 캐 시 제어
  • LOAD_CACHE_유일한:네트워크 를 사용 하지 않 고 로 컬 캐 시 데이터 만 읽 습 니 다
  • LOAD_DEFAULT:cache-control 에 따라 네트워크 에서 데 이 터 를 가 져 올 지 여 부 를 결정 합 니 다
  • LOAD_CACHE_NORMAL:API level 17 에서 폐기 되 었 습 니 다.API level 11 부터 LOAD 역할 을 합 니 다.DEFAULT 모드
  • LOAD_NO_CACHE:캐 시 를 사용 하지 않 고 네트워크 에서 만 데 이 터 를 가 져 옵 니 다.
  • LOAD_CACHE_ELSE_NETWORK,로 컬 에 만 있 으 면 기한 이 지 났 거나 no-cache 에 관 계 없 이 캐 시 에 있 는 데 이 터 를 사용 합 니 다
  • 
    WebSettings webSettings = webView.getSettings();
    webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 
    9.)WebView 화면 적응
    
     WebSettings webSettings = webView.getSettings();
     webSettings.setUseWideViewPort(true);
     webSettings.setLoadWithOverviewMode(true);
     10.)기타 자주 사용 되 지 않 는 설정
    
    WebSettings webSettings = webView.getSettings();
     webSettings.setSupportZoom(true); //    
     webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); //        
     webSettings.supportMultipleWindows(); //   
     webSettings.setAllowFileAccess(true); //        
     webSettings.setNeedInitialFocus(true); // webview  requestFocus  webview    
     webSettings.setBuiltInZoomControls(true); //      
     webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //    JS     
     webSettings.setLoadsImagesAutomatically(true); //        
    11.)지식 확장 WebViewJSBridge
    구 글 도 js 와 native 함수 가 서로 호출 되 는 방식 을 제 공 했 지만 addjavascriptInterface 를 통 해 안 드 로 이 드 4.2 이하 버 전에 어느 정도 안전 위험 이 존재 합 니 다.안 드 로 이 드 4.2 이상 에서 도@JavascriptInterface 주 해 를 추가 해 야 합 니 다.그렇지 않 으 면 호출 할 수 없습니다.위의 원인 에 근거 하여 공부 하 는 것 을 건의 합 니 다.
    WebViewJSBridge 라 는 비교적 좋 은 오픈 소스 프레임 워 크,주소:https://github.com/firewolf-ljw/WebViewJSBridge
    12.)하드웨어 가속
     하드웨어 가속 을 켜 고 GPU 렌 더 링 을 강제로 사용 합 니 다.app 의 유창 도 에 적지 않 은 향상 을 가 져 다 주 었 습 니 다.그러나 사용 하 는 과정 에서 webview 가 반 짝 이 는 것 을 만 났 고 webView 블랙 스크린 이나 화이트 스크린 을 불 러 올 수도 있 습 니 다.
    해결 방법:하드웨어 닫 기 가속
    
     webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
     이것 은 웹 뷰 의 하드웨어 를 가속 화하 여 닫 는 것 입 니 다.LAYER 설정TYPE_SOFTWARE 후 현재 view 를 bitmap 으로 변환 하여 저장 합 니 다.이렇게 하면 여러 개의 웹 뷰 를 열 수 없다.그렇지 않 으 면 out of memory 를 알 릴 것 이다.
    웹 뷰 에 다음 코드 를 추가 해 야 합 니 다.
    
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
     invalidate();
     super.onMeasure(widthMeasureSpec, heightMeasureSpec);
     }
     
    우리 일 을 할 때 언제 게 으 름 을 피 우 는 지 는 진보 의 정 지 를 의미 하고 진보 의 정 지 는 탈락 을 의미 하 며 앞으로 돌진 할 수 밖 에 없다.봉황 네 의 하루 까지!
    총결산
    이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.

    좋은 웹페이지 즐겨찾기