Cách truyền chuỗi html vào webview trên Android


141

Xin chào Tôi đang phân tích xml và sau đó tải nó lên chế độ xem web, sau khi phân tích cú pháp tôi đang tạo bốn chuỗi để tôi có thể nối tất cả các chuỗi vào một chế độ xem. Tôi có thể có được hai lượt xem trên chế độ xem web nhưng không phải là hai chuỗi đầu tiên.

Xin gợi ý cho tôi với mã của tôi, tôi đang sai ở đâu và cách chính xác để có được các chuỗi html được định dạng trên chế độ xem web. Xin hãy xem mã của tôi và giúp tôi giải quyết vấn đề này.

@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;
    }
}

Tôi có thể nhận được chươngIntro và chương trình liên kết trên chế độ xem web nhưng không phải là hai chuỗi đầu tiên, xin hãy giúp tôi các bạn.

Câu trả lời:


190

tôi đã thực hiện thành công bởi dòng dưới đây

 //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", "");

bạn có thêm cái này vào <head> trên index.php / index.html không?
Mthe ambeti 11/03/2016

1
ya nếu bạn muốn, nếu không thì sẽ ổn thôi
Siddhpura Amit

Nó cập nhật giao diện người dùng sau một chút chậm trễ. Làm thế nào để khắc phục điều đó?
Narendra Singh

Tôi có thể sử dụng "text / html", "UTF-8" không, nếu tôi muốn chuyển html sang chức năng javascript bằng webView.loadUrl ("javascript: MyFunction (data," text / html "," UTF-8 ")?
dùng1788736

Không, tôi chưa từng sử dụng như thế này
Siddhpura Amit

168

Để tải dữ liệu của bạn trong WebView. Gọi phương thức loadData () của WebView

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

Bạn có thể kiểm tra ví dụ này

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


tôi đã thử với điều đó, vẫn không xảy ra cũng đã thử với loadbaserul
cavallo

cái đó có phải hoạt động với một chuỗi chứa javascript không? Nó không hoạt động với tôi
Edu

27
nó nên làwebView.loadData(yourData, "text/html; charset=utf-8", "UTF-8");
Jaroslav

5
"Text / html; charset = utf-8" tạo ra sự khác biệt lớn, các ký tự biểu tượng không hiển thị đúng nếu không có nó.
Mic Fok

29

Vượt qua null sẽ tốt hơn. Các mã đầy đủ như:

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

bạn có thêm cái này vào <head> trên index.php / index.html không?
Mthe ambeti 11/03/2016

@mthethelelibeseti đây là mã Android, không phải mã HTML. Hay tôi hiểu nhầm câu hỏi của bạn?
Jeffrey Neo

Đây là giải pháp làm việc cho tất cả các loại chuỗi html. Cảm ơn @JeffreyNeo
Akash Bisariya

2

Tải dữ liệu bình thường không hoạt động với tôi, chuyển đổi sang Base64 hoạt động tốt.

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");

Tìm chi tiết trên WebView

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.