WebView и .html в assets

Интерфейс, диалоги, темы, стили, меню
Ответить
Anikey82
Сообщения: 5
Зарегистрирован: 09 авг 2015, 15:49

WebView и .html в assets

Сообщение Anikey82 » 29 сен 2015, 14:18

Как загрузить локальный файл.html из assets в WebView?
Через loadUrl получается, но тогда не работают ссылки на другие файлы, нашел, что нужно через loadDataWithBaseURL, но этот код не работает.

Код: Выделить всё

public class MainActivity extends AppCompatActivity {
 
    private WebView text;
    String summary = "<html><body>" + text + "</body></html>";
 
    @Override
    public void onCreate(Bundle paramBundle) {
        super.onCreate(paramBundle);
 
        setContentView(R.layout.activity_main);
        WebView localWebView = (WebView) findViewById(R.id.webview);
        localWebView.getSettings().setJavaScriptEnabled(true);        
        localWebView.loadDataWithBaseURL("file:///android_asset/context.html", summary, "text,html", "utf-8", null);
    }
Вот структура проекта в AndroidStudio

Код: Выделить всё

srs
   main
         assets
              context.html
              1.html
         res
         java
Буду премного благодарен за помощь.

ANdriy123456
Сообщения: 138
Зарегистрирован: 27 июн 2014, 01:41

Re: WebView и .html в assets

Сообщение ANdriy123456 » 29 сен 2015, 16:56

Код: Выделить всё

mWebView=(WebView)findViewById(R.id.web);
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.getSettings().setSaveFormData(true);
        mWebView.getSettings().setBuiltInZoomControls(false);
        mWebView.setWebViewClient(new MyWebViewClient());
        mWebView.loadUrl("file:///android_asset/def.html");
желетельно использовать свой WebViewClient

Код: Выделить всё

private class MyWebViewClient extends WebViewClient 
    { 
    @Override 
    	//show the web page in webview but not in web browser
	    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
	        view.loadUrl (url); 
	        return true;
	    }
    }

Anikey82
Сообщения: 5
Зарегистрирован: 09 авг 2015, 15:49

Re: WebView и .html в assets

Сообщение Anikey82 » 29 сен 2015, 18:00

В строке
WebView localWebView = (WebView) findViewById(R.id.webview);
ошибка(

Код: Выделить всё

private class MyWebViewClient extends WebViewClient {
        @Override
        //show the web page in webview but not in web browser
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
            
            WebView localWebView = (WebView) findViewById(R.id.webview);
            localWebView.getSettings().setJavaScriptEnabled(true);
            localWebView.getSettings().setSaveFormData(true);
            localWebView.getSettings().setBuiltInZoomControls(false);
            localWebView.setWebViewClient(new MyWebViewClient());

            localWebView.loadUrl("file:///android_asset/context.html");

ANdriy123456
Сообщения: 138
Зарегистрирован: 27 июн 2014, 01:41

Re: WebView и .html в assets

Сообщение ANdriy123456 » 29 сен 2015, 21:20

используйте там полностю мой код для WebViewClient.

ишибка там аз-за что, после строки "return true;" у вас никогда не доходит дальше (невозможный код).


p.s. WebViewClient нужен для того, чтобы ссылки в context.html откривалась в этом WebView, а не в стандартном браузере

Anikey82
Сообщения: 5
Зарегистрирован: 09 авг 2015, 15:49

Re: WebView и .html в assets

Сообщение Anikey82 » 08 окт 2015, 15:55

Код: Выделить всё

private class MyWebViewClient extends WebViewClient { 
        @Override 
        //show the web page in webview but not in web browser 
        public boolean shouldOverrideUrlLoading(WebView view, String url) { 
                         
            WebView localWebView = (WebView) findViewById(R.id.webview); 
            localWebView.getSettings().setJavaScriptEnabled(true); 
            localWebView.getSettings().setSaveFormData(true); 
            localWebView.getSettings().setBuiltInZoomControls(false); 
            localWebView.setWebViewClient(new MyWebViewClient()); 
            localWebView.loadUrl("file:///android_asset/context.html"); 
            view.loadUrl(url); 
            return true;
Пустую страницу загружает.

Anikey82
Сообщения: 5
Зарегистрирован: 09 авг 2015, 15:49

Re: WebView и .html в assets

Сообщение Anikey82 » 17 окт 2015, 07:56

Сделал так:

Код: Выделить всё

String webData = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webData = getHtmlFromAsset();

        WebView webView = (WebView) findViewById(R.id.webview);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setSaveFormData(true);
        webView.addJavascriptInterface(new JavaScriptIntefeise(this), "Android");
        webView.loadDataWithBaseURL(getAssets().toString(), webData, "text/html", "UTF-8", null);
    }

    private String getHtmlFromAsset() {
        InputStream is;
        StringBuilder builder = new StringBuilder();
        String htmlString = null;
        try {
            is = getAssets().open(getString(R.string.context));
            if (is != null) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                String line;
                while ((line = reader.readLine()) != null) {
                    builder.append(line);
                }

                htmlString = builder.toString();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        return htmlString;
    }

    class JavaScriptIntefeise {

        Context ctx;

        public JavaScriptIntefeise(Context ctx) {
            this.ctx = ctx;
        }

    }
Теперь страница загружается, но ссылки и стили, скрипты все равно не работают, уже все обгуглил(((

Ответить