我需要以编程方式向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);
}


我知道这显然是错误的,但是我可以通过编程方式添加边距吗?谢谢

最佳答案

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);

10-04 23:09
查看更多