Android 如何在WebView周围添加填充

Android 如何在WebView周围添加填充,android,android-layout,android-webview,padding,Android,Android Layout,Android Webview,Padding,我的布局文件定义了一个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="

我的布局文件定义了一个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在填充实现中有一个bug。在webview上设置填充不会填充实际的网页,但会填充滚动条。它只是部分按预期工作。
您的解决方案是实现网络视图“填充”的最佳方式。

只需尝试添加以下CSS:

<body style='margin:X;padding:X;'>

解决此问题的另一个方法可能是使用javascript。因此,当加载网页时,您可以执行以下js调用来设置填充:

webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        webView.loadUrl("javascript:document.body.style.margin=\"8%\"; void 0");
    }
});

添加一个带有填充的线性布局。

另一种方法是在ScrollView中设置WebView

然后,您可以将左/右边距添加到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之外,这是我希望应用程序的行为

@Sergii的代码不适合我,但下面的代码适合我

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
值更改为所需值。此外,为您的
webview

  webView.settings.javaScriptEnabled = true


试着用边距代替填充-我想这就是你想要的。填充对于WebView来说并没有什么意义,但我只是尝试用原始XML在WebView上设置layout_marginRight和layout_marginLeft,结果下面的按钮没有显示出来。我想知道是否有什么根本性的错误为什么我的布局?看起来你的布局重量设置不正确。如果按钮是包装内容,为什么要赋予它们布局权重?@DanJ android设计器有一个根本性的问题,我告诉你,你是说android:padding值不能在WebView上设置?如果你查看TextView.java的源代码,它会考虑在onDraw()中填充。但是WebView.java没有。这就可以解释为什么了。你知道为WebView设置layout_marginRight和layout_marginLeft是否有效吗?还是这样吗?或者它已经被修复,现在有办法添加填充?(没有css/javascript解决方案)6年仍然是个错误7年仍然是个错误7 1/3年仍然是个错误我认为这个答案与这个问题无关。虽然我知道它实际上可能会起作用,但问题是关于Android布局问题,而不是关于
WebView
中显示的html内容。感谢您的解决方案。这是向web视图添加填充的更好方法,因为传统的填充对内容不起作用。哈哈,这对我来说很有效-感谢您为“void 0”添加了一个填充。如果没有这些,javascript就不会运行。如果不工作,什么也不会发生。行已执行。为什么要滚动查看?一个简单的框架布局就可以了,你不必关心可能出现的嵌套滚动问题。我选择滚动视图是因为我希望滚动条紧靠滚动视图的边缘。如果我使用FrameLayout,滚动条将紧靠内部webview。这是创建相同视觉效果的最佳方法。边距方法会导致滚动行为,而滚动行为看起来就是错误的。然而,现在更好的方法可能是使用
NestedScrollView
替代。如果顶部和底部也需要“间隙”,那么我会在
NestedScrollView
上添加顶部和底部填充。这比
WebView
上的上下页边距效果更好。但是对于左和右,边距比填充效果更好。这应该是公认的答案,因为它的工作原理与预期相符。我使用了相同的解决方案,当内容可以缩放时,它也可以工作,而所有JavaScript解决方案都不能!无法按预期工作,因为填充将与zoom上的内容一起缩放。paddingLef和paddingRight对我不起作用。使用padding left和padding right
  webView.settings.javaScriptEnabled = true