一、layoutParams方法
在Android中,LayoutParams是一个重要的类,通常由ViewGroup的子类使用。LayoutParams是一个子类,它定义了子View在布局
Layout中常见的LayoutParams分别如下:
LayoutParams |- LinearLayout.LayoutParams |- RelativeLayout.LayoutParams |- FrameLayout.LayoutParams |- ...
这些LayoutParams子类都拥有多个构造函数,以满足不同的需求,其具体使用方式可以查阅官网文档。
二、layoutParams类型2006
LayoutParams中的type属性可以指定八种类型之一,默认为0,type属性的不同值代表不同的布局效果。
LayoutParams.TYPE_SYSTEM_ALERT代表这是一个全局系统级弹窗的LayoutParams,只有在TYPE_TOAST之前才可以使用。它需要权限 android.permission.SYSTEM_ALERT_WINDOW,不然在调用layParams的时候会抛java.lang.SecurityException异常。
三、layoutParams参数
LayoutParams中的参数除了上述的type属性以外,还有其他常见的参数。
1、width和height代表View的宽和高,可以设为以下值:
WRAP_CONTENT 长和宽为内容的大小, 即根据应用实际内容计算得出 MATCH_PARENT 长和宽充满父控件 固定值 长和宽为固定的数值
2、gravity表示子视图与父视图之间的在x、y轴上的对齐方式,如:center|center_vertical
3、weight属性是LinearLayout的重点,它指定了子视图所占用的空间比重,一般设为1,当调整布局时,子视图按照权重平分剩余空间。
四、layoutParams.flag
LayoutParam中的flag是一个位运算标记,可以设置LayoutParams的样式、行为和标志。该标志只能由LayoutParams的创建者使用,程序员不能直接设置。当然,使用父View里的addView()函数创建LayoutParams对象,也会自动创建一个默认的LayoutParam对象。
一些常见的标志有:
FLAG_FORCE_LAYOUT 强制父视图调用requestLayout()函数 FLAG_LAYOUT_IN_SCREEN 子控制在屏幕上占据空间的时候使子控制在屏幕上对齐父控件 FLAG_LAYOUT_NO_LIMITS 子控制不会限制在视图容器之内的布局属性
五、layoutParams.type
在LayoutParams中,type即为layoutParams.type,可以指定当前LayoutParams的类型,在不同类型下会表现出不同的布局效果。
几个常见的布局类型有:
ABSOLUTE 指定控件的绝对位置, 忽略左右高低的绘制规则 FILL_PARENT 当前控件充满父控件 MATCH_PARENT 当前控件内容和容器(父控件)内容一样大小 WRAP_CONTENT 根据内容自适应控件大小
六、layoutParams flags
LayoutParams中的flags属性,用于定义LayoutParams的表现。flags属性是一个int类型的标志,可以组合使用,表示LayoutParams的效果。
常见的属性有:
LAYOUT_FLAG_NO_BACKGROUND 不要绘制ViewGroup的背景 LAYOUT_FLAG_CLIP_TO_PADDING 在ViewGroup中显示视窗内的内容而不是全部,通俗地说,就是在绘制背景时是否经过padding LAYOUT_FLAG_CLIP_CHILDREN 标记是否对子视图进行修剪和是否避免在子视图之外进行绘画
七、layoutParams overlay
LayoutParams中的overlay是一个布尔值,用于指定窗口的overlay属性。如果为true,则表示该view是在其他的视图之上进行渲染;否则,该视图在所有其他非覆盖视图后面进行渲染。
八、layoutParams match_parent
一般在父控件中间,我们会让一个子视图填满父控件,这时我们就需要使用match_parent属性。该属性需要在子视图LayoutParam的width或height使用,如果都使用会覆盖宽和高的尺寸,比如:
九、layoutParams设置margin单位
LayoutParam中的margin是为了让视图之间产生间隔,由于视图之间的间隔有时需要按像素值控制,因此需要LayoutParam支持按像素值设置margin。
在LayoutParam继承类(如FrameLayout.LayoutParams)中,同时支持按比例设置margin和按像素数值设置margin。
LayoutParams lp = new FrameLayout.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); int margin = 20;//20px lp.setMargins(margin, margin, margin, margin); view.setLayoutParams(lp);
十、LayoutParams type=2002、2003
LayoutParams中的Type分为八种,这其中有两种是能被我们使用的,分别为Type 2002和Type 2003。他们分别是MATCH_CONSTRAINT和MATCH_CONSTRAINT_SPREAD,是约束布局中使用的,是ConstraintLayout的布局。
Type 2002 即为MATCH_CONSTRAINT,与Match、Fixed、Wrap三个属性类似,同时又不同于他们。Type 2003,即MATCH_CONSTRAINT_SPREAD,与Type 2002类似,但是同时地,它又能够扩展,即在一定程度上,该属性能够与其他控件进行融合。
基本的使用方式会根据不同的控件,有些细节会略有不同,如果需要请引用官方文档进行更详细地学习。
十一、结语
本文对Android中LayoutParams进行了详细的剖析,包括类型、参数、flag、overlay、match_parent,margin单位、以及MATCH_CONSTRAINT和MATCH_CONSTRAINT_SPREAD。LayoutParams是布局的基础知识之一,在掌握LayoutParams后,能够让我们更加灵活地应对开发过程中的布局问题。