안드로이드에서 HTML 문자열을 webview에 전달하는 방법


141

안녕하세요 .xml을 구문 분석 한 다음 웹보기에로드합니다. 파싱 후 4 개의 문자열을 만들어서 모든 문자열을 하나의보기에 추가 할 수 있습니다. 웹보기에서 두 가지보기를 얻을 수 있지만 처음 두 문자열은 볼 수 없습니다.

Pls는 내 코드를 제안합니다. 어디로 가고 있습니까? 웹보기에서 형식이 지정된 HTML 문자열을 얻는 올바른 방법은 무엇입니까? Pls는 내 코드를 살펴 보고이 문제를 해결하도록 도와줍니다.

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        String chapterTitle = "";
        String SubChapterTitle="";
        String chapterIntro ="";
        String chapterContent="";
        View view = convertView;
        if (convertView == null) {
            // view = inflater.inflate(resourceid, null);
            view = getLayoutInflater().inflate(R.layout.webviewitem, null);
        }
        synchronized (view) {
            WebView wv = (WebView) view.findViewById(R.id.contentWebView);

            WebSettings settings = wv.getSettings();
            settings.setUseWideViewPort(true);
            settings.setLoadWithOverviewMode(true);
            settings.setJavaScriptEnabled(true);
            settings.setDefaultZoom(ZoomDensity.FAR);
            // wv.setBackgroundColor(0);
            wv.setVerticalScrollBarEnabled(false);
            wv.setHorizontalScrollBarEnabled(false);
            /*String txtChapTitle = Intro.book.getsecretList().get(position)
                    .getChtitle().toString();*/

            if (!(Intro.book.getsecretList().get(position).getChtitle()
                    .toString().equals(""))){
            chapterTitle = "<b><fontSize=4>"+Intro.book.getsecretList().get(position)
            .getChtitle().toString()+"</font></b>";
            }
            if (!(Intro.book.getsecretList().get(position)
                    .getSubtitle() == null)) {
                SubChapterTitle = "<b><fontSize=4>"+Intro.book.getsecretList().get(position)
                .getSubtitle().toString()+"</font></b>";
            }
            if (!(Intro.book.getsecretList().get(position)
                    .getIntro() == null)) {
            chapterIntro = "<b><fontSize=2>"+Intro.book.getsecretList().get(position)
                .getIntro().toString()+"</font></b>";
            }
            if (!(Intro.book.getsecretList().get(position)
                    .getContent() == null)) {
            chapterContent = "<fontSize=2>"+Intro.book.getsecretList().get(position)
                .getContent().toString()+"</font>";
            }

            StringBuilder content = new StringBuilder();
            content.append(chapterTitle+SubChapterTitle+chapterIntro+chapterContent);

            JsInterface Jsi = new JsInterface();
            Jsi.wordDef = content ;
            Log.v("Content", "" +content);
            wv.addJavascriptInterface(Jsi, "interfaces");

            wv.setWebViewClient(new WebViewClient() {
                @Override
                public void onPageFinished(WebView view, String url) {
                    view.setHapticFeedbackEnabled(false);
                }
            });

            wv.setWebChromeClient(new WebChromeClient() {
                @Override
                public boolean onJsAlert(WebView view, String url,
                        String message, JsResult result) {
                    return super.onJsAlert(view, url, message, result);
                }
            });

            wv.loadUrl("file:///android_asset/wordview.html");
        }
        return view;
    }
}

웹보기에서 chapterIntro 및 chaptercontent를 얻을 수 있지만 처음 두 문자열 pls는 친구를 도울 수 없습니다.

답변:


190

아래 줄에 의해 성공적으로 완료되었습니다

 //data == html data which you want to load 
 WebView webview = (WebView)this.findViewById(R.id.webview);
 webview.getSettings().setJavaScriptEnabled(true);
 webview.loadDataWithBaseURL("", data, "text/html", "UTF-8", "");

이것을 index.php / index.html의 <head>에 추가합니까?
Mthe beseti

1
나중에 원한다면 그렇지 않으면 괜찮을 것입니다
Siddhpura Amit

약간의 지연 후에 UI를 업데이트합니다. 그 문제를 해결하는 방법?
Narendra Singh

webView.loadUrl ( "javascript : MyFunction (data,"text / html ","UTF-8 ")을 사용하여 html을 자바 스크립트 함수에 전달하려는 경우"text / html ","UTF-8 "을 사용할 수 있습니까?
user1788736

아니요 나는 이렇게 사용하지 않았습니다
Siddhpura Amit

168

WebView에서 데이터를로드합니다. WebView의 loadData () 메소드 호출

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

이 예제를 확인할 수 있습니다

http://developer.android.com/reference/android/webkit/WebView.html


나는 그것으로 시도, 여전히 일어나지 않는 것도 loadbaserul와 함께 시도
cavallo

자바 스크립트가 포함 된 문자열로 작동해야합니까? 그것은 나를 위해 작동하지 않습니다
Edu

27
그것은해야webView.loadData(yourData, "text/html; charset=utf-8", "UTF-8");
야로슬라프

5
"text / html; charset = utf-8"은 큰 차이를 만들어냅니다. 그렇지 않으면 기호 문자가 제대로 렌더링되지 않습니다.
Mic Fok

29

null을 전달하는 것이 좋습니다. 전체 코드는 다음과 같습니다.

WebView wv = (WebView)this.findViewById(R.id.myWebView);
wv.getSettings().setJavaScriptEnabled(true);
wv.loadDataWithBaseURL(null, "<html>...</html>", "text/html", "utf-8", null);

이것을 index.php / index.html의 <head>에 추가합니까?
Mthe beseti

@mthethelelibeseti 이것은 HTML이 아닌 Android 코드입니다. 아니면 당신의 질문을 오해 했습니까?
Jeffrey Neo

모든 유형의 html 문자열에 작동하는 솔루션입니다. 감사합니다 @ JeffreyNeo
Akash Bisariya

2

정상적인 데이터를로드하는 것이 효과가 없었으며 Base64로 변환하면 정상적으로 작동합니다.

String unencodedHtml ="<html><body>'%28' is the code for '('</body></html>";
tring encodedHtml = Base64.encodeToString(unencodedHtml.getBytes(), Base64.NO_PADDING);
webView.loadData(encodedHtml, "text/html", "base64");

WebView에서 세부 사항 찾기

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.