【问题标题】:Android Add margins programmatically to WebviewAndroid以编程方式将边距添加到Webview
【发布时间】:2014-05-07 14:00:45
【问题描述】:

我需要以编程方式为 web 视图添加边距。我想做如下的事情:

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

我知道这显然是错误的,但是我可以做这样的事情来以编程方式添加边距吗?谢谢

【问题讨论】:

  • ((Activity) context) 的那部分很奇怪,否则我不会说obviously wrong,事实上这对我来说看起来很合适。
  • 好吧,这绝对是错误的,((Activity) context) 部分是因为我在 java 类中有方法,所以我可以在不同的活动中重用它
  • 对于初学者,我可能宁愿做类似p = webView.getLayoutParams() 而不是创建一个。
  • 我也试过了,没有设置边距的选项
  • 我可以在其中的相对视图上设置布局参数,并在相对视图中添加填充而不是在 web 视图中添加边距?或者将 webview 包装在相对布局中并为其添加边距?

标签: java android webview margins


【解决方案1】:

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

它是给父元素的关于元素定位的指示。

因此,如果您的WebViewLinearLayout 中,getLayoutParams 将为您提供LinearLayout.LayoutParams

也就是说,为了有MarginLayoutParam的后代,一个支持边距的LayoutParams,你的WebView必须放在一个支持边距的ViewGroup中,比如LinearLayout或者RelativeLayout。 (参见后代列表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);

【讨论】:

  • 这是完美的,按预期工作,感谢您的帮助,非常感谢它
【解决方案2】:

试试这个代码:

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

如果不起作用,则取该视图的线性布局父视图并为其插入填充。

示例代码:

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

第二个示例代码:

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

【讨论】:

  • 无法将LayoutParams 添加到网络视图
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-04
  • 1970-01-01
  • 2015-02-24
相关资源
最近更新 更多