我需要以编程方式为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);
}
我知道这显然是错误的,但有没有这样我可以做的以编程方式添加边距?感谢
答案 0 :(得分:10)
LayoutParams
要理解的是:LayoutParams
不依赖于它设置的元素,而是依赖于父元素。
这是父母关于元素定位的指示。
因此,如果您的WebView
位于LinearLayout
,则getLayoutParams
会为您提供LinearLayout.LayoutParams
。
这意味着,为了拥有MarginLayoutParam
的后代,支持边距的LayoutParams,您的WebView必须放在支持边距的ViewGroup
中,例如LinearLayout
或RelativeLayout
。 (参见后代列表http://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html)。换句话说,WebView
本身不支持边距,其父节点也是如此。
在这种情况下,您应该将LayoutParams
从WebView
转换为:
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);