Android 动态改变View的方法有暂时学习有两种:
一、View 的
layout(int l, int t, int r, int b)方法。其中的参数:上下左右的坐标(注:开始以为是距上下左右的距离,其实是坐标,)例:view 往左移20 view.layout( view .getLeft()+50, view .getTop(), view .getRight()+50, view .getBottom())。
注:1、
layout(int l, int t, int r, int b) 如果在Acitivity没有创建完成的方法里面调用,没有效果。也就是不能再oncreate(),onresume()等方法里面调用。其实也比较好理解,如果Activity都没有创建好,窗口都没有展示,没有必要去动态改变View,真要如此做的话,直接在layout文件里面去布局好了。
2、requestLayout( )方法
当view确定自身已经不再适合现有的区域时,该view本身调用这个方法要求parent view重新调用他的onMeasure onLayout来对重新设置自己位置。特别的当view的layoutparameter发生改变,并且它的值还没能应用到view上,这时候适合调用这个方法。
自己的理解:当View绘制不过来的时候,获取调用layout()没有反应的时候,调用requestLayout(),比如在手势的onscroll方法里面实现View随手指一动,当手指放开的时候,再调用layout()给View重新定位的时候,layout方法没有起作用,这是调用requestLayout()就好了。
例:触发单击事件改变View的位置,就不能用requestLayout方法,否则layout方法不起作用
(这里也不是很了解为什么,只是遇到了这两种情况)
二、LayoutParams
RelativeLayout.LayoutParams lps = new RelativeLayout.LayoutParams(width, height);
width和height,很容易误解成父的宽和高,其实是需要动态改变布局位置View的width和height.
初始化完成之后我们只是确定View的大小,还是没有改变位置,莫急,接下来怎么动态改变位置。
1、RelativeLayout : addRule(verb, anchor) 方法可以在第一个参数这是,左对齐,右对齐,居中等等。
如果要相对左右View的位置来定位怎么办?
lp.leftMargin = 100;相对左边的距离
lp.rightMargin =100;相对右边的距离
AbsoluteLayout.LayoutParams(int width, int height, int x, int y)
LinearLayout.LayoutParams(int width, int height)
Android开发技术研交群:182709499