English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Android에서 원시 구성 요소 WebView를 사용하여 웹 페이지와 데이터를 로드하는 방법

Api에서 이 클래스에 대한 설명은 주로 이 클래스가 웹 페이지를 표시할 수 있는 뷰라는 것입니다. 예를 들어:

webView.loadUrl(http://www.baidu.com/);

표시 결과:

또한 html 문자열을 추가로 로드할 수 있습니다. 예를 들어:

String str = "<html><body>점수를 <b>192</b> points.</body></html>";
webView.loadData(str, "text/html", null);

표시 결과:

이 컴포넌트를 통해 Activity에서 웹 페이지를 표시하거나 브라우저로 이동하여 웹 페이지를 표시할 수 있습니다. 상단 예제는 스마트폰 브라우저로 이동하여 백도우 인터페이스를 표시하는 예제입니다. 아래 WebView 메서드 설명에서는 WebView의 메서드를 사용하여 웹 페이지가 현재 Activity에서 표시되도록 제한할 것입니다

아래에서 WebView의 사용법을 step by step로 보여드리겠습니다

1. 웹 페이지 로드

1.WebView는 웹 페이지를 표시하며, 사용할 때는 항상 네트워크 권한을 추가해야 합니다

<uses-permission android:name="android.permission.INTERNET"/>

2.XML 레이아웃에 WebView 태그를 추가하고 Activity에서 인스턴스화합니다

<WebView
android:id="@"+id/main_webview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
webView = (WebView) findViewById(R.id.main_webview);

3.그 후WebView의 loadUrl 메서드를 통해 웹 페이지를 로드할 수 있습니다

webView.loadUrl(http://www.baidu.com/);

4.하지만 이렇게 로드된 웹 페이지는 스마트폰 브라우저로 이동합니다. 웹 페이지가 현재 Activity에서 표시되도록 제한하려면 브라우저 모드를 false로 설정해야 합니다
추가 코드如下:

webView = (WebView) findViewById(R.id.main_webview);
// WebView의 클라이언트 설정
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;// false를 반환
}
});
webView.loadUrl("http://www.baidu.com/");

표시 결과:

이렇게 하면 간단하게 웹 페이지를 로드할 수 있습니다

WebView는 또한 WebSettings 추상 클래스를 제공하여 표시되는 웹 페이지의 일부 기본 내용을 설정할 수 있습니다. 인스턴스화 방법은 WebView 객체의 get 메서드를 통해 가져옵니다

WebSettings webSettings = webView.getSettings();

이 클래스를 통해 WebView가 표시하는 웹 페이지의 다양한 속성을 설정할 수 있습니다

속성이生效되는지 확인하기 위해WebView가 표시하는 웹 페이지를 특별히 변경했습니다. 회사의 웹사이트로 변경했습니다. 속성을 설정하지 않았을 때 표시되는 웹 페이지 스타일을 확인해 보면, 인터페이스가 스마트폰 화면에 맞지 않으며, 매우 나쁜 사용자 경험을 제공합니다

이후 저는 WebSettings 클래스를 통해 웹 페이지를 표시하는 다양한 속성을 설정했습니다

WebSettings webSettings = webView.getSettings();
// WebView가 JavaScript를 실행할 수 있도록 설정
webSettings.setJavaScriptEnabled(true);
// JavaScript가 자동으로 windows를 열 수 있도록 설정
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
// 캐시를 설정
webSettings.setAppCacheEnabled(true);
// 캐시 모드를 설정, 총 네 가지 모드가 있습니다
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
// 캐시 경로를 설정
// webSettings.setAppCachePath("");
// 확대 축소를 지원(현재 스크린에 맞추기)
webSettings.setSupportZoom(true);
// 이미지를 적절한 크기로 조정
webSettings.setUseWideViewPort(true);
// 콘텐츠 재구성을 지원합니다. 총 네 가지 방식이 있습니다
// 기본적으로는 NARROW_COLUMNS입니다
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
// 화면 제어가 표시될 수 있도록 설정
webSettings.setDisplayZoomControls(true);
// 기본 문자 크기를 설정
webSettings.setDefaultFontSize(12);

설정이 완료된 후 실행 결과를 확인해 보세요:

전체 코드:

목록 파일: 네트워크 권한을 추가하는 것을 잊지 마세요

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wu.webviewdemo">
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

레이아웃 파일

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#000"
android:gravity="center"
android:paddingBottom=""10dp"
android:paddingTop=""10dp"
android:text="WebView 사용"
android:textAllCaps="false"
android:textColor="#fff" />
<WebView
android:id="@"+id/main_webview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>

Activity

package com.wu.webviewdemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.main_webview);
// WebView의 클라이언트 설정
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;// false를 반환
}
});
WebSettings webSettings = webView.getSettings();
// WebView가 JavaScript를 실행할 수 있도록 설정
webSettings.setJavaScriptEnabled(true);
// JavaScript가 자동으로 windows를 열 수 있도록 설정
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
// 캐시를 설정
webSettings.setAppCacheEnabled(true);
// 캐시 모드를 설정, 총 네 가지 모드가 있습니다
webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
// 캐시 경로를 설정
// webSettings.setAppCachePath("");
// 확대 축소를 지원(현재 스크린에 맞추기)
webSettings.setSupportZoom(true);
// 이미지를 적절한 크기로 조정
webSettings.setUseWideViewPort(true);
// 콘텐츠 재구성을 지원합니다. 총 네 가지 방식이 있습니다
// 기본적으로는 NARROW_COLUMNS입니다
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
// 화면 제어가 표시될 수 있도록 설정
webSettings.setDisplayZoomControls(true);
// 기본 문자 크기를 설정
webSettings.setDefaultFontSize(12);
webView.loadUrl("http://www.lanou3g.com/");
}
}

2. html 문자열 로드

Android 개발에서 일반적으로 발생하는 문제 중 하나는, 상세 페이지가 단순한 텍스트나 단순한 웹 페이지가 아니라, 인터페이스를 통해 미리 작성된 html 데이터를 제공하는 것입니다. 이러한 데이터를 처리할 때, 일반적으로 WebView를 통해 데이터를 로드하는 방식을 사용합니다. 이는 WebView의 다른 메서드를 사용하는 것입니다.

public void loadData(String data, String mimeType, String encoding)

1.먼저 html 문자열이 어떤 것인지 확인해보겠습니다. 설득력을 높이고 실제와 맞추기 위해 자신이 만든 문자열(예를 들어, 초반 예시) 대신 왕이뉴스의 내용(오래된 학생과 제자의 뉴스, 저는 고구마 라이브러리를 매우 좋아합니다. 결국 술을 마시고 머리를 먹이는 것은 좋습니다)을 도용했습니다.

private String body = "<p>  <b>网易娛樂專稿"9月7報道</b>(文/小易)" +
"今日凌晨,郭德綱鶴字輩弟子在微博發文對德雲社表忠心,稱自己之前在外私自接活,離開德雲社," +
"因羞愧兩年沒有師父郭德綱與師娘聯繫,本應該被清出師門,但承蒙師父郭德綱不離不棄。" +
"之後,郭德綱轉發該微博並附文「知錯能改,善莫大焉」。加上前幾天曹雲金與何雲偉鬧郭德綱內幕一事," +
"本應告一段落的郭德綱與徒弟的各種糾紛若如此下去,恐怕難以徹底收場。</p><p>  <b>韓鶴曉微博原文:" +
"</b></p><p>  2006年考入鶴字科取名鶴曉,2009年6月13日恩師郭德綱先生收我为郭門弟子。" +
"數年間吃、住、學藝在德雲基地,師父師娘分文未取。"2010年結婚師父師娘給我和愛人贈送了紅包與婚戒," +
"並在德雲基地給我們提供了婚房。"2014年9月,我由於個人原因,私自赴外地發展。後來返京羞於面對恩師," +
"兩年未敢與恩師見面。後到上海發展,"2016年6月師父上海演繹期間,終於鼓起勇氣向師父認錯," +
"師父寬宏大量原諒了我。時隔兩月回京之際,專程上家中看望師娘,並求得了原諒。以鶴曉所犯之錯," +
"이것이 '청문'을 유발할 수 있고, 덕云 가족 분위기를 다시 세우는 시기에 사사님의 부정하지 않음에 감사합니다. '시간을 주어 확인해 보겠다'는 것이 제자에게 큰 도움이 되었습니다." +
"죄인鹤晓 감사합니다. 사사님의 가르침과 사랑을 잊지 않고, 베이징에서 수천 리 떨어져 있지만, 영원히 덕云을 사랑할 것입니다." +
"오랫동안 사사님의 간절한 가르침을 잊지 않고, 실력을 발휘하며, 사람이 되기 위해 노력하겠습니다! 사사님과 사사님 어머니의 건강이 잘 되시길 바랍니다! 제자鹤晓 깊이 인사합니다!"/p>";

2.設定一下默認的字符編碼,Android中普遍使用UTF-8

WebSettings webSettings = webView.getSettings();
webSettings.setDefaultTextEncodingName("UTF-8");

3.之後調用WebView的loadData方法

webView.loadData(body, "text/html; charset=UTF-8", null);

顯示效果如下:

下面是全部代碼,布局繼續使用(一、加載網頁)的,代碼部分也沒有太大的更改,具體如下:

package com.wu.webviewdemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
private WebView webView;
private String body = "<p>  <b>网易娛樂專稿"9月7報道</b>(文/小易)" +
"今日凌晨,郭德綱鶴字輩弟子在微博發文對德雲社表忠心,稱自己之前在外私自接活,離開德雲社," +
"因羞愧兩年沒有師父郭德綱與師娘聯繫,本應該被清出師門,但承蒙師父郭德綱不離不棄。" +
"之後,郭德綱轉發該微博並附文「知錯能改,善莫大焉」。加上前幾天曹雲金與何雲偉鬧郭德綱內幕一事," +
"本應告一段落的郭德綱與徒弟的各種糾紛若如此下去,恐怕難以徹底收場。</p><p>  <b>韓鶴曉微博原文:" +
"</b></p><p>  2006年考入鶴字科取名鶴曉,2009年6月13日恩師郭德綱先生收我为郭門弟子。" +
"數年間吃、住、學藝在德雲基地,師父師娘分文未取。"2010年結婚師父師娘給我和愛人贈送了紅包與婚戒," +
"並在德雲基地給我們提供了婚房。"2014年9月,我由於個人原因,私自赴外地發展。後來返京羞於面對恩師," +
"兩年未敢與恩師見面。後到上海發展,"2016年6月師父上海演繹期間,終於鼓起勇氣向師父認錯," +
"師父寬宏大量原諒了我。時隔兩月回京之際,專程上家中看望師娘,並求得了原諒。以鶴曉所犯之錯," +
"이것이 '청문'을 유발할 수 있고, 덕云 가족 분위기를 다시 세우는 시기에 사사님의 부정하지 않음에 감사합니다. '시간을 주어 확인해 보겠다'는 것이 제자에게 큰 도움이 되었습니다." +
"죄인鹤晓 감사합니다. 사사님의 가르침과 사랑을 잊지 않고, 베이징에서 수천 리 떨어져 있지만, 영원히 덕云을 사랑할 것입니다." +
"오랫동안 사사님의 간절한 가르침을 잊지 않고, 실력을 발휘하며, 사람이 되기 위해 노력하겠습니다! 사사님과 사사님 어머니의 건강이 잘 되시길 바랍니다! 제자鹤晓 깊이 인사합니다!"/p>";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.main_webview);
WebSettings webSettings = webView.getSettings();
webSettings.setDefaultTextEncodingName("UTF-8");
webView.loadData(body, "text/html; charset=UTF-8", null);
}
}

위에서 소개한 Android이 원생성 요소 WebView를 통해 웹 페이지와 데이터를 로드하는 방법은 여러분들에게 도움이 되길 바랍니다. 어떤 질문이든 질문을 남겨 주시면, 저는 즉시 답변 드리겠습니다. 또한, 여러분들의 지원에 깊이 감사드립니다.呐喊 강의 사이트에 대한 지원에 감사합니다!

성명서: 이 문서의 내용은 인터넷에서 수집되었으며, 저작권자는 본인입니다. 내용은 인터넷 사용자가 자발적으로 기여하고 업로드한 것이며, 이 사이트는 소유권을 가지지 않으며, 인공 편집을하지 않았으며, 관련 법적 책임도 부담하지 않습니다. 저작권 위반 내용이 있을 경우 메일을 보내 주시기 바랍니다: notice#oldtoolbag.com(메일을 보내는 경우, #을 @으로 변경하십시오. 신고하시고 관련 증거를 제공하시면, 사실이 확인되면 이 사이트는 즉시 위반된 내용을 삭제합니다.)

추천해드립니다