有时候,我们会判断当前我们的View 是否可见。
常见的判断如:

View.getVisibility() == View.VISIBLE

还有一种是

View.isShown().

这两种有什么区别呢?我们看下的源码:

getVisibility 源码:

    @Visibilitypublic int getVisibility() {return mViewFlags & VISIBILITY_MASK;}

isShown 源码:

    /*** Returns the visibility of this view and all of its ancestors** @return True if this view and all of its ancestors are {@link #VISIBLE}*/public boolean isShown() {View current = this;//noinspection ConstantConditionsdo {if ((current.mViewFlags & VISIBILITY_MASK) != VISIBLE) {return false;}ViewParent parent = current.mParent;// 如果parent 是null 说明并没有连接到view rootif (parent == null) {return false; // We are not attached to the view root}//最终的ViewParenet 是ViewRootImpl, 会走到这里,返回trueif (!(parent instanceof View)) {return true;}current = (View) parent;} while (current != null);return false;}

我们看到getVisibility 只是查看了一下当前view 的flag,返回结果。

而isShown 方法会先判断当前View 的flag, 然后循环拿到父View,判断是不是可见。只要有一个是不可见的,那么isShown就返回false.

所以,区别就是:

getVisibility 只会判断当前View 是不是可见。isShown 会判断当前View 可见,并且所有的View 树上的parent 也是可见的。

android View.isShown() 和 getVisibility() 的区别相关推荐

  1. android view.isshown,android View.isShown() 和 getVisibility() 的区别

    有时候,我们会判断当前我们的View 是否可见. 常见的判断如: View.getVisibility() == View.VISIBLE 还有一种是 View.isShown(). 这两种有什么区别 ...

  2. android view.isshown,源码解析view的显示判断用isShown()还是View.VISIBLE

    前言 平时我们对View的显示判断都是用简要的方式去判断,那么,究竟是用view.isShown()去判断还是用view. getVisibility() == View.VISIBLE 判断好呢?其 ...

  3. android view.isshown,关于android:View getVisibility()isShown()返回不正确的可见性

    我有一个有条件地添加到父视图. 我检查它是否已经添加到父级,不幸的是,它总是返回其可见状态. if (findViewById(R.id.bottom_bar).getVisibility == Vi ...

  4. Android View 测量流程(Measure)完全解析

    前言 上一篇文章,笔者主要讲述了DecorView以及ViewRootImpl相关的作用,这里回顾一下上一章所说的内容:DecorView是视图的顶级View,我们添加的布局文件是它的一个子布局,而V ...

  5. 你需要知道的Android View的布局

    上一篇我们分析Android View的测量.我们先回顾一下,View的测量,在ViewRootImpl#performTraverals方法下,先进行对DecorView根布局测量获取Measure ...

  6. android中getLocationInWindow 和 getLocationOnScreen的区别

    原文链接:http://blog.csdn.net/ouyang_peng/article/details/46902957 //一个控件在其父窗口中的坐标位置 View.getLocationInW ...

  7. android view强制重绘_android view 相关方法 layout draw 布局 重绘 | 学步园

    http://blog.csdn.net/az44yao/article/details/8208087 ViewGroup用onLayout实现view的自由移动 http://qq18715568 ...

  8. ActivityGroup中的子Activity创建Dialog:android.view.WindowManager$BadTokenException: U

    我们在ActivityGroup或者TabActivity中的子Activity创建Dialog若使用以下的代码 progressDialog = new ProgressDialog(XXX.thi ...

  9. Android中style和theme的区别

    在学习Xamarin android的过程中,最先开始学习的还是熟练掌握android的六大布局-LinearLayout .RelativeLayout.TableLayout.FrameLayou ...

最新文章

  1. 区块链为什么这么热?有这么大热度的原因是什么
  2. html中事件调用JavaScript函数时有return与没有return的区别
  3. 理解int的存储方式以及VS二进制编辑器的使用
  4. Ubuntu apt-get 更新/查看软件
  5. 电商库存详解:三层(销售层、调度层、仓库层)来看库存设计
  6. mysql传入乱码_mysql 插入中文乱码解决方案 --转了
  7. 米斯特白帽培训讲义 工具篇 Nmap
  8. 华为android10版本,华为手机助手(安卓版)最新手机版10.1.1.500
  9. python源文件的执行方式_python源程序执行的方式有哪几种
  10. opencv 基本绘图函数
  11. 计算机相关专业EI及SCI国际会议及期刊汇总
  12. 【框架----Dubbo】基于开源Dubbo分布式RPC服务框架的部署整合
  13. 计算24点有什么窍门或技巧吗?
  14. matlab描点连线画图
  15. (STM32笔记2)基于hc05的蓝牙实验
  16. JAVA-企业微信报警工具类
  17. 【FFmpeg+Qt开发】转码流程 H.264 转(mov、mp4、avi、flv)等视频格式 示例详解
  18. 华硕顽石第四代FL5900u拆机换电池
  19. Linux:chmod命令
  20. PHP导出Excel时数据量过大的问题

热门文章

  1. MFC中UPD通信详细解说
  2. linux查询数据库sql,SQL Server 跨数据库查询
  3. graphpad怎么处理cck8的_Graphpad Prism 的 4 个隐藏技能助你轻松发表 SCI
  4. [译] MDC-101 Flutter:Material Components(MDC)基础(Flutter)
  5. conda环境里安装pydot
  6. 使用 Azure CLI 2.0 从自定义磁盘创建 Linux VM
  7. win7安装mysql-5.7.18
  8. 图形上下文的栈操作(保存和恢复)
  9. Java SE7新特性之switch语句中使用字符串
  10. 用什么样的个人笔记类软件?OneNote、EverNote(印象笔记)、为知笔记、麦库记事、有道云笔记……...