在oncreate()中利用view.getWidth()或是view.getHeiht()来获取view的宽和高,看似没有问题,其实他们去得值是0,并不是你想要的结果?

这是为什么呢?

在调用oncreate()方法时,界面处于不可见状态,内存加载组件还没有绘制出来,你是无法获取他的尺寸。

那如何在绘制组件之前能获取到该组件的尺寸大小呢?

这里有三种方法,经过验证的:

方法一 :
//测量方法

?
1
2
3
4
5
int width =View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
int height =View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED);
view.measure(width,height);
int height=view.getMeasuredHeight();
int width=view.getMeasuredWidth();

方法二 :

?
1
2
3
4
5
6
7
8
9
//增加组件绘制之前的监听
ViewTreeObserver vto =view.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
   @Override
    public booleanonPreDraw() {
       int height =view.getMeasuredHeight();
       int width =view.getMeasuredWidth();    
   }
});

方法三 :

?
1
2
3
4
5
6
7
8
9
10
//增加整体布局监听
ViewTreeObserver vto = view.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener(){
    @Override 
    public voidonGlobalLayout() {
      view.getViewTreeObserver().removeGlobalOnLayoutListener(this);     
    int height =view.getMeasuredHeight();
     int width =view.getMeasuredWidth(); 
    
});

那么,在activity进入运行期时,组件的尺寸获取方法就很简单了,直接getWidth()和getHeight().

转载于:https://www.cnblogs.com/helinzi/p/5019588.html

Android 获得view的宽和高相关推荐

  1. Android 正确获取View的宽和高

    Android 在实际开发过程中,我们可能经常要获取View的宽和高,那么如何来正确获取一个View的宽和高呢. View提供了getWidth(),getHeight(),getMeasureWid ...

  2. 自定义View 中很关键的问题View获取宽/高是0 的解决办法

    原因 Activity的生命周期方法 与 View在measure过程 不是同步执行的,也就是说Activity在执行onCreate ,onStart , onResume 过程中 ,View的测量 ...

  3. android获取控件宽和高

    Android获取控件宽高 在项目中用到了测量控件的宽和高,这个在Activity的onCreate去使用控件的getHeight()和getWidth()方法去获取是会失败的,返回的都是0.这是由于 ...

  4. Android自定义View——可以设置最大宽高的FrameLayout

    为什么80%的码农都做不了架构师?>>>    可以设置最大宽高的FrameLayout 支持相对父控件的半分比设置 默认优先比例设置 不支持参数小于零 MaxLayout.java ...

  5. android 获取屏幕的宽和高

    屏幕高度:context.getResources().getDisplayMetrics().heightPixels 屏幕宽度:context.getResources().getDisplayM ...

  6. android 自定义特效,Android自定义View之高仿QQ健康

    我们都知道自定义View一般有三种直接继承View.继承原有的控件对控件的进行修改.重新拼装组合,最后一种主要针对于ViewGroup.具体的怎么做不是本文的所涉及的内容(本文是基于第一种方式实现的) ...

  7. 面试官问我:View.post为什么能够获取View的宽高

    记得看文章三部曲,点赞,评论,转发. 微信搜索[程序员小安]关注还在移动开发领域苟活的大龄程序员,"面试系列"文章将在公众号同步发布. 1.前言 最近看到几个技术群里都在吐槽目前面 ...

  8. Android之View绘制流程源码分析

    版权声明:本文出自汪磊的博客,转载请务必注明出处. 对于稍有自定义View经验的安卓开发者来说,onMeasure,onLayout,onDraw这三个方法都不会陌生,起码多少都有所接触吧. 在安卓中 ...

  9. Android自定义View之仿QQ侧滑菜单实现

    最近,由于正在做的一个应用中要用到侧滑菜单,所以通过查资料看视频,学习了一下自定义View,实现一个类似于QQ的侧滑菜单,顺便还将其封装为自定义组件,可以实现类似QQ的侧滑菜单和抽屉式侧滑菜单两种菜单 ...

最新文章

  1. 责任链设计模式(过滤器、拦截器)
  2. ASP.NET Core 2.0使用Log4net实现记录日志功能
  3. XML Tree Editor(树形视图XML编辑器) v0.1.0.35
  4. 笨办法学 Python · 续 练习 18:性能测量
  5. python中oxf2是多少_Python学习笔记[2]
  6. 数组元素循环右移问题
  7. weblogic启动报:java.lang.ClassCastException: com.octetstring.vde.backend.BackendRoot
  8. 商场云WiFi靠谱吗
  9. 悟空遥控器 --- 手机投屏到电视 播放视频
  10. 人机大战三周年:围棋界发生了哪些巨变?
  11. 什么是Python中的Pip?
  12. PDF如何修改,PDF怎么删除其中一页
  13. Swift学习第七枪--协议(一)
  14. python shutil.move 移动文件
  15. 什么是SEO?SEO是什么职业?
  16. html语义化标签是什么,HTML语义化标签探析
  17. C语言总结这一篇就够了(不收藏必后悔系列)
  18. Linux设备驱动-platform虚拟总线dya02
  19. 【论文翻译】梯度域高动态范围压缩
  20. 什么是WebSocket?WebSocket在Vue中如何使用?

热门文章

  1. 云计算商家必争之地 推荐几款云平台
  2. 算不算被虚度的这几年
  3. 如何打印出lua里table的内容
  4. 042_前端规范 2021-06-03
  5. 【ECharts学习】—实现我的第一个图表
  6. 【PHP学习】—PHP连接数据库实现表单页面的验证功能(七)
  7. JavaScript学习(四十一)—字面量形式创建对象的注意事项和不足
  8. HTML+CSS实现轮播图效果
  9. 想安装一套监控,流程是什么?费用多少?
  10. 固收基金可以长期持有吗?