自定义viewGroup时候.layout(int l, int t, int r, int b)方法说明

时间:2022-10-14 05:26:20
void android.view. View.layout(int l, int t, int r, int b)
是指  该VIEW  与其父类 VIEW 的关系
以父类VIEW的 左上角为 原点0,0
那么, left就是 子视图 左边距到 父类左边距的 距离
top就是 子视图 上边距到 父类上边距的 距离
right就是 子视图 右边距到 父类左边距的 距离  ,可以理解为,子视图left+子视图的宽度
bottom就是 子视图 底部边距到 父类上边距的 距离,可以理解为,子视图top+子视图的高度
               

我在用task请求网络 ,返回onPostExecute 中更新UI,发现 textview的背景可以更换,text内容也更改了,可是layout设置位置并没有变化。
在textview上做了个onclicklistener点击时,改变位置却可以。
后面发现,需要用handler. postDelayed
新建一个消息,并且需要让该控件获取焦点,就可以了。
[java]  view plain  copy   自定义viewGroup时候.layout(int l, int t, int r, int b)方法说明 自定义viewGroup时候.layout(int l, int t, int r, int b)方法说明
  1. airQualityActivity.getHandlerInstance().postDelayed(new Runnable() {  
  2.               
  3.             @Override  
  4.             public void run() {  
  5.                 // TODO Auto-generated method stub  
  6.                 airIconTextView.requestFocus();  
  7.                 airIconTextView.layout(tempView.getLeft(),0,airIconTextView.getWidth()+tempView.getLeft(),airIconTextView.getHeight());           
  8.             }  
  9.         }, 100);  

说明:

1. 自定义一个view时,建议重写onLayout,以设定它的位置。 

   在外部调用时,调用layout(),触发设定位置。


2. 自定义一个viewGroup时,必须且只能重写onLayout。

   需要在设定子view的位置:调用subview.layout(); 触发