Android: загрузка HTML в формате AMP в WebView

Я получаю HTML-код в формате ускоренных мобильных страниц (APM) из веб-вызова. Затем я пытаюсь отобразить этот AMP в WebView. Итак, я настраиваю свой WebView следующим образом:

webView = (WebView) findViewById(R.id.web_view);
webView.setWebChromeClient(new WebChromeClient());
webView.getSettings().setJavaScriptEnabled(true);
String content = article.getContentAmp();
webView.loadData(content, "text/html; charset=utf-8", null);

Он отображает содержимое без ошибок, но не правильно. Он игнорирует, например, элементы amp-youtube и встроенные твиты.

Есть ли что-то еще, что мне нужно сделать с WebView или WebChromeClient для правильного отображения AMP?

РЕДАКТИРОВАТЬ:

Ответ ниже работает. Но в моем конкретном случае я использовал WebView внутри NestedScrollView. Что отлично работало в Android 5.0+, но ниже не загружались элементы amp-.

Удаление WebView из NestedScrollView решило проблему. Его родитель теперь является относительным макетом.

Поэтому, если у вас возникла та же проблема, попробуйте упростить макет, чтобы WebView не был глубоко вложенным. И уж точно не помещайте свой WebView внутрь NestedScrollView.


person ninjachippie    schedule 19.04.2016    source источник
comment
Последний комментарий о том, что веб-просмотр не должен размещаться внутри NestedScrollView, безусловно, уместен. При этом совершенно бесполезно при попытке использовать настройку CoordinatorLayout + AppBarLayout + CollapsingToolbarLayout с веб-просмотром ниже. Есть советы?   -  person Chantell Osejo    schedule 26.10.2016


Ответы (1)


Вы не можете отображать такие элементы, как встроенные видеоролики YouTube, изображения, твиты и т. д., не указав для WebView базовый URL-адрес. Решение состояло в том, чтобы использовать webview.loadDataWithBaseUrl вместо webView.loadData. Вы должны передать ему действительный URL.

webView = (WebView) findViewById(R.id.web_view);
    webView.setWebChromeClient(new WebChromeClient());
    webView.getSettings().setJavaScriptEnabled(true);
    String content = article.getContentAmp();
    String baseUrl = extractUrlFromContent(content);
    webView.loadDataWithBaseURL(baseUrl, content, "text/html", "utf-8", "");
person ninjachippie    schedule 19.04.2016
comment
Я знаю, что этот пост действительно старый, но у меня возникла проблема с компонентами усилителя в веб-представлении. Почему-то компоненты не реагируют на клики, например у меня есть amp-ads, которые должны открываться в браузере при клике, но не реагируют на клики. Любая помощь приветствуется. @ниндзячиппи - person Mr.O; 30.10.2018