(Android)View.getHeight或getWidth为0时的一些解决方案

在Android开发过程中,经常需要动态的更改View的大小,有些View的大小可能需要根据其他View的大小来设定,或者你需要得到一些View的大小来进行某项操作,但是有可能你需要在onCreate中就得到这个值,但是有些Android基础的开发人员都清楚,Android在onCreate方法(或者OnResume)中并不知道这些View的大小。这个时候我们需要怎么办呢?

1.第一种暴力方式

你可以写一个子线程,让它先延迟几百毫米,然后再去获取View的大小,哈哈,这种方法好扯淡,我也这么觉得。。

2.在onWindowFocusChanged 监听中获取

onWindowFocusChanged方法的调用时机是窗口获取到焦点的时候,这个时候View都已经绘制完毕了,正确的Height和Width也就能够得到了。

3.使用View.post

1 mView = findViewById(R.id.textview);
2         mView.post(new Runnable() {
3             @Override
4             public void run() {
5                 int viewWidth = mView.getWidth();
6                 int viewHeight = mView.getHeight();
7                 Log.d(TAG, "viewWidth:" + viewWidth + "\nviewHeight:" + viewHeight);
8             }
9         });

这种方式可以让runable中的run方法在绘制完毕后去执行,但是这种方式我这不知道为什么,有时候需要我去点击一下屏幕,或者做其他操作后,才会去执行,不明所以

4.使用Handler

这种方式大部分人都能够想到

5.监听Draw/Layout事件:ViewTreeObserver

ViewTreeObserver greenObserver = mView.getViewTreeObserver();
                        greenObserver.addOnPreDrawListener(new OnPreDrawListener() {

                            @Override
                            public boolean onPreDraw() {
                                mView.getViewTreeObserver().removeOnPreDrawListener(this);
                                int height = mView.getHeight
                                     
                                return true;
                            }
                        }); 

 

posted on 2015-04-20 21:20 厌世夕阳 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/recwert/p/4442692.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值