Android自定义控件GroupView之MarginLayoutParams

1. MarginLayoutParams
是 ViewGroup.LayoutParams 的子类 
2. 使用
我总结了下,一般我们会在哪些地方使用到 MarginLayoutParams

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

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


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 = 100;
        mlp.width = 200;
        tv.setLayoutParams(mlp);

当然也可以使用如下获取

   RelativeLayout.MarginLayoutParams mlp = new RelativeLayout.LayoutParams(tv.getLayoutParams());
1
注意:这里的RelativeLayout 是 tv 的父布局

2.2 自定义view或者viewGroup中
如下是自定义viewgroup中

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

 

你可能感兴趣的:(java)