RelativeLayout相对布局

相对布局容器中, 子组件的位置总是相对兄弟组件,父容器来决定的;


RelativeLayout支持的属性

(1) 对齐方式

xml属性 : android:gravity;

设置方法 : setGravity(int);

作用 : 设置布局容器内子元素的对齐方式, 注意与android:layout_gravity区分, 后者是设置组件本身元素对齐方式;

(2) 忽略对齐方式

xml属性 : android:ignoreGravity;

设置方法 : setIgnoreGravity(int);

作用 : 设置该组件不受gravity属性影响, 因为gravity属性影响容器内所有的组件的对齐方式, 设置了之后,该组件就可以例外;


LayoutParams属性

(1) 只能设置boolean值的属性

这些属性都是相对父容器的, 确定是否在父容器中居中(水平, 垂直), 是否位于父容器的 上下左右 端;

是否水平居中 : android:layout_centerHorizontal;

是否垂直居中 : android:layout_centerVertical;

是否位于中央 : android:layout_centerInParent;

是否底端对齐 : android:layout_alignParentBottom;

是否顶端对齐 : android:layout_alignParentTop;

是否左边对齐 : android:layout_alignParentLeft;

是否右边对齐 : android:layout_alignParentRight;

(2) 只能设置其它组件id的属性

位于所给id组件左侧 : android:layout_toLeftOf;

位于所给id组件右侧 : android:layout_toRightOf;

位于所给id组件的上边 : android:layout_above;

位于所给id组件的下方 : android:layout_below;

与所给id组件顶部对齐 : android:layout_alignTop;

与所给id组件底部对齐 : android:layout_alignBottom;

与所给id组件左边对齐 : android:layout_alignLeft;

与所给id组件右边对齐 : android:layout_alignRight;


相对布局常用方法

(1) 获取屏幕中一个组件的位置

创建数组 : 要先创建一个整型数组, 数组大小2位; 这个数组传入getLocationOnScreen()方法;

将位置信息传入数组 : 可以调用View.getLocationOnScreen()方法, 返回的是一个数组 int[2], int[0] 是横坐标, int[1] 是纵坐标;

//获取组件

Button b = (Button) this.findViewById(R.id.Button01);
//创建数组, 将该数组传入getLocationOnScreen()方法
int locations[] = new int[2];
//获取位置信息
b.getLocationOnScreen(locations);
//获取宽度
int width = locations[0];
//获取高度
int height = locations[1]; 

(2) LayoutParams的使用设置所有属性

属性设置方法少 : Android SDK中View类只提供了很少用于设置属性的方法,大多数属性没有直接对应的获得和设置属性值的方法, 看起来貌似不是很好用;

使用LayoutParams设置属性值 : Android中可以对任何属性进行设置, 这里我们需要一个LayoutParams对象, 使用这个LayoutParams.addRule()方法, 可以设置所有组件的属性值; 设置完之后调用View.setLayoutParams()方法, 传入刚才创建的LayoutParams对象, 并更新View的相应的LayoutParams属性值, 向容器中添加该组件;

代码中动态设置布局属性 :

a. 创建LayoutParams对象

b. 调用LayoutParams对象的addRule()方法设置对应属性;

c. 调用View.setLayoutParams()方法将设置好的LayoutParams对象设置给组件;

d. 调用addView方法将View对象设置到布局中去;

使用代码设置android:layout_toRightOf 和 android:layout_below属性 :

//装载布局文件

RelativeLayout relativeLayout = (RelativeLayout) getLayoutInflater().inflate(R.layout.relative, null);

//装载要动态添加的布局文件

Button button = (Button) relativeLayout.findViewById(R.id.bt1);

//创建一个LayoutParams对象

LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

//设置android:layout_toRightOf属性

layoutParams.addRule(RelativeLayout.RIGHT_OF, R.id.bt2);

//设置android:layout_below

layoutParams.addRule(RelativeLayout.BELOW, R.id.bt2);

//更新Button按钮的属性

button.setLayoutParams(layoutParams);

//向布局中动态添加按钮

relativeLayout.addView(button); 

 

 

原文地址:https://www.cnblogs.com/loaderman/p/6430559.html