在做代码相对布局的摆放时,一般情况下 layout_alignParentLeft 与 layout_alignParentStart 是一样的 。
这两天在做动态布局的需求时,发现这两个属性是存在区别。
背景:
需求是这样的,当时点击一个按钮时,需要把原来已经显示的布局,动态修改成另一种形式,比如 一个RelativeLayout 的左面有个返回按钮Button1,中间是标题TextView, 末尾是跳转按钮Button2。当点击改变布局的按钮后,需要让左面的返回按钮Button1隐藏,中间标题TextView动态挪到最左面显示,跳转按钮Button2不变。
这个功能需要用到动态布局的修改,RelativeLayout.LayoutParams 来设置Rule 修改布局的相对规则。
结论:
当我在xml预先设置TextView的相对布局是layout_alignParentStart时,动态设置Rule不起作用。但是我把 layout_alignParentStart 改成 layout_alignParentLeft 时,再设置Rule 的 CENTER_IN_PARENT 或者 ALIGN_PARENT_LEFT 是可以动态修改的。
附上代码:
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) tvTitle.getLayoutParams();
layoutParams.getRules()[RelativeLayout.CENTER_IN_PARENT] = 0;
layoutParams.getRules()[RelativeLayout.ALIGN_PARENT_LEFT] = 0;
layoutParams.getRules()[RelativeLayout.CENTER_VERTICAL] = 0;
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);
tvTitle.setLayoutParams(layoutParams);