用代码设置 RelativeLayout.LayoutParams

1.注意

  • 不能在RelativeLayout容器本身和他的子元素之间产生循环依赖,比如说,不能将RelativeLayout的高设置成为WRAP_CONTENT的时候将子元素的高设置成为 ALIGN_PARENT_BOTTOM。
  • 如果parent是wrap_content的话,alignParentRight就意味着要求parent的layout_width="match_parent"; alignParentBottom就意味着要求parent的layout_height="match_parent"

  等等。

2.用代码设置 RelativeLayout.LayoutParams

 1         RelativeLayout.LayoutParams params3 = (RelativeLayout.LayoutParams) holder.layout.getLayoutParams();
 2 
 3         //如果之前设置了rule,同时设置了多个rules可能冲突,下面代码清空rules
 4         if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){// >= 17
 5             params3.removeRule(RelativeLayout.RIGHT_OF);
 6         }else{
 7             int rules[] = params3.getRules();
 8             rules[RelativeLayout.LEFT_OF] = 0;
 9             rules[RelativeLayout.RIGHT_OF] = 0;
10         }
11         //添加新的rules,一般刚创建RelativeLayout.LayoutParams时,不要添加任何rule
12         if (mb.contact.isSelf()) {
13             params3.addRule(RelativeLayout.LEFT_OF,R.id.msg_portrait);
14         }else{
15             params3.addRule(RelativeLayout.RIGHT_OF,R.id.msg_portrait);
16         }
17         holder.layout.setLayoutParams(params3);

3.常用的rule

  1     /**
  2      * Rule that aligns a child's right edge with another child's left edge.
  3      */
  4     public static final int LEFT_OF                  = 0;
  5     /**
  6      * Rule that aligns a child's left edge with another child's right edge.
  7      */
  8     public static final int RIGHT_OF                 = 1;
  9     /**
 10      * Rule that aligns a child's bottom edge with another child's top edge.
 11      */
 12     public static final int ABOVE                    = 2;
 13     /**
 14      * Rule that aligns a child's top edge with another child's bottom edge.
 15      */
 16     public static final int BELOW                    = 3;
 17 
 18     /**
 19      * Rule that aligns a child's baseline with another child's baseline.
 20      */
 21     public static final int ALIGN_BASELINE           = 4;
 22     /**
 23      * Rule that aligns a child's left edge with another child's left edge.
 24      */
 25     public static final int ALIGN_LEFT               = 5;
 26     /**
 27      * Rule that aligns a child's top edge with another child's top edge.
 28      */
 29     public static final int ALIGN_TOP                = 6;
 30     /**
 31      * Rule that aligns a child's right edge with another child's right edge.
 32      */
 33     public static final int ALIGN_RIGHT              = 7;
 34     /**
 35      * Rule that aligns a child's bottom edge with another child's bottom edge.
 36      */
 37     public static final int ALIGN_BOTTOM             = 8;
 38 
 39     /**
 40      * Rule that aligns the child's left edge with its RelativeLayout
 41      * parent's left edge.
 42      */
 43     public static final int ALIGN_PARENT_LEFT        = 9;
 44     /**
 45      * Rule that aligns the child's top edge with its RelativeLayout
 46      * parent's top edge.
 47      */
 48     public static final int ALIGN_PARENT_TOP         = 10;
 49     /**
 50      * Rule that aligns the child's right edge with its RelativeLayout
 51      * parent's right edge.
 52      */
 53     public static final int ALIGN_PARENT_RIGHT       = 11;
 54     /**
 55      * Rule that aligns the child's bottom edge with its RelativeLayout
 56      * parent's bottom edge.
 57      */
 58     public static final int ALIGN_PARENT_BOTTOM      = 12;
 59 
 60     /**
 61      * Rule that centers the child with respect to the bounds of its
 62      * RelativeLayout parent.
 63      */
 64     public static final int CENTER_IN_PARENT         = 13;
 65     /**
 66      * Rule that centers the child horizontally with respect to the
 67      * bounds of its RelativeLayout parent.
 68      */
 69     public static final int CENTER_HORIZONTAL        = 14;
 70     /**
 71      * Rule that centers the child vertically with respect to the
 72      * bounds of its RelativeLayout parent.
 73      */
 74     public static final int CENTER_VERTICAL          = 15;
 75     /**
 76      * Rule that aligns a child's end edge with another child's start edge.
 77      */
 78     public static final int START_OF                 = 16;
 79     /**
 80      * Rule that aligns a child's start edge with another child's end edge.
 81      */
 82     public static final int END_OF                   = 17;
 83     /**
 84      * Rule that aligns a child's start edge with another child's start edge.
 85      */
 86     public static final int ALIGN_START              = 18;
 87     /**
 88      * Rule that aligns a child's end edge with another child's end edge.
 89      */
 90     public static final int ALIGN_END                = 19;
 91     /**
 92      * Rule that aligns the child's start edge with its RelativeLayout
 93      * parent's start edge.
 94      */
 95     public static final int ALIGN_PARENT_START       = 20;
 96     /**
 97      * Rule that aligns the child's end edge with its RelativeLayout
 98      * parent's end edge.
 99      */
100     public static final int ALIGN_PARENT_END         = 21;

 

转载于:https://www.cnblogs.com/sjjg/p/5807746.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值