Как добавить отступы вокруг WebView - PullRequest
34 голосов
/ 07 февраля 2012

Мой файл макета определяет WebView, под которым есть несколько кнопок с фиксированной высотой.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:fadingEdge="none">

  <WebView
    android:id="@+id/webview"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="1.0"/>

  <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="60dp"
    android:padding="8dp">

    <Button
      android:text="Decline"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_weight="1.0">
    </Button>

    <Button
      android:text="Accept"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_weight="1.0">
    </Button>

  </LinearLayout>
</LinearLayout>

Я пытаюсь добавить отступы вокруг WebView, так как в данный момент текст проходит до самого края пользовательского интерфейса.

Я попытался добавить android:padding="8dp" в WebView, но заполнение не было добавлено. Я также пробовал paddingLeft и paddingRight, но они тоже не работали.

Документы API WebView подтверждают, что он наследуется от View, который поддерживает атрибут android: padding , поэтому я удивлен, что это не сработало.

Кто-нибудь знает, является ли это известной проблемой или каким-то взаимодействием с моим макетом XML, которое я не понимаю?

К вашему сведению, мой обходной путь состоял в том, чтобы поместить дополнительный LinearLayout вокруг WebView и добавить вместо него отступ:

  <LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="1.0"
    android:padding="8dp">

    <WebView
      android:id="@+id/webview"
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"/>

  </LinearLayout>

Ответы [ 7 ]

37 голосов
/ 07 февраля 2012

В WebView есть ошибка в реализации заполнения.Установка отступов для веб-просмотра не будет дополнять фактическую веб-страницу, но будет дополнять полосы прокруткиЭто только частично работает, как ожидалось.Ваше решение - лучший способ добиться «заполнения» для WebView.

22 голосов
/ 09 февраля 2015

Другим обходным решением этой проблемы может быть использование JavaScript. Поэтому, когда ваша веб-страница загружена, вы можете сделать такой вызов js для установки отступов:

webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        webView.loadUrl("javascript:document.body.style.margin=\"8%\"; void 0");
    }
});
4 голосов
/ 13 июня 2014

Просто попробуйте добавить этот CSS:

<body style='margin:X;padding:X;'>
3 голосов
/ 24 июня 2016

Альтернативным подходом было бы установить WebView внутри ScrollView

Затем вы можете добавить левое / правое поле в WebView, и оно получит эффект заполнения. Однако прокрутка будет обрабатываться ScrollView.

<ScrollView style="@style/MatchMatch">

    <WebView
        android:id="@+id/my_web_view"
        android:layout_marginLeft="@dimen/webViewMargin"
        android:layout_marginRight="@dimen/webViewMargin"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</ScrollView>

Это приведет к тому, что полоса прокрутки будет размещена за пределами WebView, и это именно то поведение, которое я хотел для своего приложения.

2 голосов
/ 21 февраля 2019

@ код Сергея у меня не сработал, но следующее делает

mWebView.setWebViewClient(new mWebViewClient(){
        @Override
        public void onPageFinished(WebView web, String url) {
            web.loadUrl("javascript:(function(){ document.body.style.paddingTop = '55px'})();");
        }
    });

Вы также можете изменить paddingTop на paddingBottom, paddingRight, paddingLeft.Измените значение 55px на любое другое.Кроме того, включите JavaScript для вашего webview

  webView.settings.javaScriptEnabled = true
1 голос
/ 23 января 2016

Добавьте LinearLayout вокруг него с отступом.

0 голосов
/ 07 февраля 2012

Использование отступов здесь НЕ обходится. для этой цели есть отступы для макета.

Итак, ваш «обходной путь» - это то, что вы должны были сделать.

...