android代码设置RelativeLayout子控件位置(addRule)

今天在项目中遇到一个banner的标题文字太长的时候,和指示器重叠的小问题

android代码设置RelativeLayout子控件位置(addRule)_第1张图片
问题表述

这个标题是用相对布局在代码中动态添加的,看了下代码,原来是没有设置标题控件的相对于指示器图标左边;那么设置一下就好了。查了下,动态设置位置的代码


addRule可传入不同的布局参数 常用的布局参数有以下:

layoutParams.alignWithParent = true 如果对应的兄弟元素找不到的话就以父元素做参照物 RelativeLayout.CENTER_HORIZONTAL 在父控件中水平居中 

RelativeLayout.CENTER_VERTICAL 在父控件中垂直居中 

RelativeLayout.CENTER_IN_PARENT 相对于父控件完全居中 

RelativeLayout.ALIGN_PARENT_BOTTOM 紧贴父控件的下边缘

 RelativeLayout.ALIGN_PARENT_TOP 紧贴父控件的上边缘 

RelativeLayout.ALIGN_PARENT_LEFT紧贴父控件的左边边缘

 RelativeLayout.ALIGN_PARENT_RIGHT 紧贴父控件的右边缘 

RelativeLayout.ABOVE 在某元素的上方 需要第二个参数为某元素的ID 

RelativeLayout.BELOW 在某元素的下方 需要第二个参数为某元素的ID 

RelativeLayout.LEFT_OF 在某元素的左边 需要第二个参数为某元素的ID 

RelativeLayout.RIGHT_OF 在某元素的右边 需要第二个参数为 某元素的ID 

RelativeLayout.ALIGN_TOP 本元素的上边缘和某元素的的上边缘对齐 需要第二个参数为某元素的ID

RelativeLayout.ALIGN_BOTTOM 本元素的上边缘和某元素的的下边缘对齐 需要第二个参数为某元素的ID 

RelativeLayout.ALIGN_LEFT 本元素的上边缘和某元素的的左边缘对齐 需要第二个参数为某元素的ID 

RelativeLayout.ALIGN_RIGHT 本元素的上边缘和某元素的的右边缘对齐 需要第二个参数为某元素的ID 

RelativeLayout.ALIGN_BASELINE 本元素的基线和某元素的的基线对齐 需要第二个参数为某元素的ID


这里需要设置的是,文字TextView要在指示器的右边,添加一个规则:rlp.addRule(RelativeLayout.LEFT_OF,vIndicator.getId());

但是,这样是不起作用的,因为动态添加的view是没有id的,所以要这样写:

vIndicator.setId(0x888);

rlp.addRule(RelativeLayout.LEFT_OF,0x888);

然后就可以了,看一下效果

android代码设置RelativeLayout子控件位置(addRule)_第2张图片
修改后的效果

代码如下:

RelativeLayout.LayoutParams rlp1= new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);

rlp1.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE);

rlp1.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);

vIndicator.setId(0x888);

vBottomBar.addView(vIndicator, rlp1);

RelativeLayout.LayoutParams rlp= new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);

rlp.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);

rlp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);

rlp.addRule(RelativeLayout.LEFT_OF,0x888);

vBottomBar.addView(vTitleBar, rlp);


一次小的记录,分享给大家,也留着以后遇到的时候,参考。

你可能感兴趣的:(android代码设置RelativeLayout子控件位置(addRule))