代码中设置view的大小和位置

代码中设置view的大小和位置

1、getViewTreeObserver().addOnPreDrawListener的使用:

(1)使用后要调用.getViewTreeObserver().removeOnPreDrawListener()


2、获取view的大小
通常在OnCreate()和Resume()中是无法获取到view的大小的,可通过设置(getViewTreeObserver().addOnPreDrawListener())监听,在回调中获取view的大小


3、动态设置view的大小和位置
(1)在获取到view的大小和位置后,setLeft()和setRight()可以设置view的大小或者通过layout()函数

(2)调用(1)的方法后并不是马上就能见效,view并不一定就绘制成功了,所以不能马上调用removeOnPreDrawListener().可以加一个if条件判断,通过getLeft

(或者其他函数)得到view的位置1,然后比较位置1与要设置的位置是否相同来确定是否已经绘制成功。



例子:设置view右侧处于屏幕中线
conNectView = (ImageView) findViewById(R.id.connecting);
conNectView.getViewTreeObserver().addOnPreDrawListener(new OnPreDrawListener() {
@Override
public boolean onPreDraw() {
  // TODO Auto-generated method stub
int screenWidth = MainActivity.this.getWindowManager().getDefaultDisplay().getWidth();
int mid = screenWidth /2;
//Log.e("MainActivity", "right=" + conNectView.getRight());
if(conNectView.getRight() == mid){//当右边位置处于屏幕中间时,移除监听
conNectView.getViewTreeObserver().removeOnPreDrawListener(this);
}
conNectView.setLeft(mid - width);
conNectView.setRight(mid);
//Log.e("MainActivity", "right=" + conNectView.getRight());
return true;
}
});

3、OnGlobalLayoutListener在OnPreDrawListener前面调用


4、可通过getViewTreeObserver来监听输入法是否显示
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值