Android以编程方式将边距添加到Webview

时间:2014-05-07 14:00:45

标签: java android webview margins

我需要以编程方式为webview添加边距。我想做类似下面的事情:

public void setSideMargin(final int sideMargin, int id) {
    WebView webView = (WebView) ((Activity) context)
            .findViewById(id);

    WebView.LayoutParams p = new WebView.LayoutParams(
            WebView.LayoutParams.MATCH_PARENT,
            WebView.LayoutParams.WRAP_CONTENT);

    p.leftMargin = sideMargin;
    p.rightMargin = sideMargin;

    webView.setLayoutParams(p);
}

我知道这显然是错误的,但有没有这样我可以做的以编程方式添加边距?感谢

2 个答案:

答案 0 :(得分:10)

LayoutParams要理解的是:LayoutParams不依赖于它设置的元素,而是依赖于父元素。

这是父母关于元素定位的指示。

因此,如果您的WebView位于LinearLayout,则getLayoutParams会为您提供LinearLayout.LayoutParams

这意味着,为了拥有MarginLayoutParam的后代,支持边距的LayoutParams,您的WebView必须放在支持边距的ViewGroup中,例如LinearLayoutRelativeLayout。 (参见后代列表http://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html)。换句话说,WebView本身不支持边距,其父节点也是如此。

在这种情况下,您应该将LayoutParamsWebView转换为:

ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) webView.getLayoutParams();

完成后,您可以修改边距:

p.leftMargin = sideMargin;
p.rightMargin = sideMargin;

webView.setLayoutParams(p);

答案 1 :(得分:0)

尝试使用此代码:

WebView.LayoutParams layoutParams = (WebView.LayoutParams) webView.getLayoutParams();
webView.layoutParams.leftMargin = sideMargin;
webView.layoutParams.rightMargin = sideMargin;
webView.setLayoutParams(layoutParams);

如果不起作用,则取此视图的linearlayout parent并为其插入填充。

示例代码:

LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) webView.getParent().getLayoutParams();
layoutParams.setMargins(sideMargin, 0, sideMargin, 0);
((LinearLayout)webView.getParent()).setLayoutParams(layoutParams);

第2个示例代码:

LinearLayout webviewLayout = (LinearLayout) webView.getParent();
webviewLayout.setPadding(sideMargin,0,sideMargin,0);