天天看点

MarginLayoutParams使用总结

导语:相对来说平时使用

LayoutParams

较多,但是最近在看自定义view时,发现使用

MarginLayoutParams

更多,所以在这里对它做个总结

1. MarginLayoutParams

ViewGroup.LayoutParams

的子类

MarginLayoutParams使用总结

再看看 ViewGroup.LayoutParams 有多少子类,后面用的着

MarginLayoutParams使用总结

2. 使用

我总结了下,一般我们会在哪些地方使用到

MarginLayoutParams

2.1 Activity/Fragment

这种界面代码中,我们会通过获取它来给View设置参数,比如我的这篇博客

Java设置View 的 Layout_Gravity 和 Gravity

这篇博客的意义不在于学习下这两个属性参数,只是抛砖引玉的学习其他参数的设置。

要使用它,就要获取它。比如有一个Button,我们在 java 代码中设置它的宽高、padding、margin,但是你会发现找不到

view.getMarginLayoutParams

,看下文档就会发现

MarginLayoutParams使用总结
Even though a view can define a padding, it does not provide any support for margins. However, view groups provide such a support. Refer to ViewGroup and ViewGroup.MarginLayoutParams for further information.

尽管我们可以设置一个view的 padding ,但是并没有提供 margins 的方法支持,然而, viewGroup 提供了这样的方法。看到没,我们要设置 button 的 margin ,还需要通过

ViewGroup.MarginLayoutParams

来,同时它又是 LayoutParams 的子类,所以又可以设置 view 的

width

height

等等,所以相比来说好像大神们都喜欢使用这个。但是比较蛋疼的是,android并没有提供

View.getMargingLayoutParams

方法获取该对象,所以,获取的方法,一般都先获取

LayoutParams

然后将它强转成

MarginLayoutParams

。设置 view 的宽高 间距,在 java 中一般这样写

RelativeLayout.MarginLayoutParams mlp = (RelativeLayout.MarginLayoutParams) tv.getLayoutParams();
        mlp.leftMargin = ;
        mlp.width = ;
        tv.setLayoutParams(mlp);
           

当然也可以使用如下获取

注意:这里的

RelativeLayout

是 tv 的父布局

2.2 自定义view或者viewGroup中

如下是自定义viewgroup中

MarginLayoutParams mlp = (MarginLayoutParams) getLayoutParams();
        mlp.height = ;
        setLayoutParams(mlp);
           

自定义view没见到过,怎么说呢,感觉没必要这中需求,设置

width

,

margin

有太多方法可以设置了,没必要还这样。

ok 可能总结的不全,但是足够我们使用了 结合这篇

Java设置View 的 Layout_Gravity 和 Gravity

继续阅读