LayoutParams addRule()方法使用

LayoutParams我们知道,特别是在 RelativeLayout 布局中有很多特殊的属性,通常在载入布局之前,在相关的xml文件中进行静态设置即可。

但是,在有些情况下,我们需要动态设置布局的属性,在不同的条件下设置不同的布局排列方式,这时候就需要用到 RelativeLayout.LayoutParams.addRule() 方法,该方法有两种重载方式;
1、addRule(int verb) 用此方法时,所设置节点的属性不能与其它兄弟节点相关联或者属性值为布尔值(布尔值的属性,设置时表示该属性为 true,不设置就默认为 false),比如:addRule(RelativeLayout.CENTER_VERTICAL) 就表示在 RelativeLayout 中的相应节点是垂直居中的。
2、addRule(int verb, int subject) 该方法所设置节点的属性必须关联其它的兄弟节点或者属性为布尔值( 属性为布尔值时,anchor 为 RelativeLayout.TRUE 表示 true,anchor 为0表示 false),比如:addRule(RelativeLayout.ALIGN_LEFT, R.id.date) 就表示 RelativeLayout 中的相应节点放置在一个 id 值为 date 的兄弟节点的左边

当我们有时候用 layoutParams.addRule(RelativeLayout.ALIGN_PARENT_START)添加规则时,多次调用addRule会出现多种规则重叠的使用,查看源码可以看到我们设置的规则会存储在数组int[] mRules = new int[VERB_COUNT]中,为了保证准确显示所需要的的规则,需要在清除数据mRlues中的数据,通过调用layoutParams.removeRule(RelativeLayout.ALIGN_PARENT_START);来清楚之前的规则,就可以达到需要的效果

RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) mImageView.getLayoutParams();
layoutParams.removeRule(RelativeLayout.ALIGN_PARENT_END);
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_START);
mIvTransBg.setLayoutParams(layoutParams);

你可能感兴趣的:(LayoutParams addRule()方法使用)