今天在项目中遇到一个banner的标题文字太长的时候,和指示器重叠的小问题
这个标题是用相对布局在代码中动态添加的,看了下代码,原来是没有设置标题控件的相对于指示器图标左边;那么设置一下就好了。查了下,动态设置位置的代码
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);
然后就可以了,看一下效果
代码如下:
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);
一次小的记录,分享给大家,也留着以后遇到的时候,参考。