为什么我们使用setLayoutParams?

时间:2016-02-19 07:51:16

标签: android layoutparams

例如,如果您希望将某些视图的LayoutParams更改为WRAP_CONTENT widthheight programmaticaly,则会看起来像这样:

 final ViewGroup.LayoutParams lp = yourView.getLayoutParams();
 lp.height = ViewGroup.LayoutParams.WRAP_CONTENT;
 lp.width = ViewGroup.LayoutParams.WRAP_CONTENT;

当我感到不安时getLayoutParams会返回params的引用,所以这段代码就足够了,但我经常在示例中看到,依此类推后,接下来就是:

 yourView.setLayoutParams(lp);

我想知道这条线的重点是什么。这只是为了更好的代码可读性,还是有些情况下没有它就无法工作?

3 个答案:

答案 0 :(得分:5)

New-WebBinding还会触发cd iis:\Sites\MySitesetLayoutParams(),这会通知视图已更改内容,刷新它。或者我们无法确保新的布局参数能够正常工作。

请参阅resolveLayoutParams()来源代码:

requestLayout()

答案 1 :(得分:0)

无法确保您对getLayoutParams()返回的LayoutParams所做的任何更改都会得到正确反映。它可以通过Android版本改变。因此,您必须致电setLayoutParams()以确保视图将更新这些更改。

答案 2 :(得分:0)

如果您不使用setLayoutParams(),则在调用View.onLayout()时,您的布局设置会生效。

以下是View.setLayoutParams()

的源代码

public void setLayoutParams(ViewGroup.LayoutParams params) { if (params == null) { throw new NullPointerException("Layout parameters cannot be null"); } mLayoutParams = params; resolveLayoutParams(); if (mParent instanceof ViewGroup) { ((ViewGroup) mParent).onSetLayoutParams(this, params); } requestLayout(); }

如您所见,requestLayout将在setLayoutParams中调用。此视图将立即重新布局。 onLayout也会被调用。

相关问题