MarginLayoutParams使用总结

导语:相对来说平时使用 LayoutParams 较多,但是最近在看自定义view时,发现使用 MarginLayoutParams
更多,所以在这里对它做个总结

1. MarginLayoutParams

ViewGroup.LayoutParams 的子类


MarginLayoutParams使用总结_第1张图片

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


MarginLayoutParams使用总结_第2张图片

2. 使用

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

2.1 Activity/Fragment

这种界面代码中,我们会通过获取它来给View设置参数,比如我的这篇博客
Java设置View 的 Layout_Gravity 和 Gravity
这篇博客的意义不在于学习下这两个属性参数,只是抛砖引玉的学习其他参数的设置。

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


MarginLayoutParams使用总结_第3张图片

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 的 widthheight 等等,所以相比来说好像大神们都喜欢使用这个。但是比较蛋疼的是,android并没有提供 View.getMargingLayoutParams 方法获取该对象,所以,获取的方法,一般都先获取 LayoutParams 然后将它强转成 MarginLayoutParams 。设置 view 的宽高 间距,在 java 中一般这样写

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

当然也可以使用如下获取

   RelativeLayout.MarginLayoutParams mlp = new RelativeLayout.LayoutParams(tv.getLayoutParams());

注意:这里的RelativeLayout 是 tv 的父布局

2.2 自定义view或者viewGroup中

如下是自定义viewgroup中

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

自定义view没见到过,怎么说呢,感觉没必要这中需求,设置 width ,margin 有太多方法可以设置了,没必要还这样。

ok 可能总结的不全,但是足够我们使用了 结合这篇
Java设置View 的 Layout_Gravity 和 Gravity

你可能感兴趣的:(一切尽在掌握中)