view设置gone的时候getHeight()的值

原创 2015年07月07日 16:56:36

view设置gone的时候getHeight()的值

    public final int getHeight() {

        return mBottom - mTop;

    }

是由mBottom和mTop决定的

假定父控件parentView为linearLayout,子控件childView为View;

追踪到onLayout

    protected void onLayout(boolean changed, int l, int t, int r, int b) {

        if (mOrientation == VERTICAL) {

            layoutVertical(l, t, r, b);

        } else {

            layoutHorizontal(l, t, r, b);

        }

    }

2选1,看layoutVertical

void layoutVertical(int left, int top, int right, int bottom) {

...

else if (child.getVisibility() != GONE) {

...

setChildFrame(child, childLeft, childTop + getLocationOffset(child),childWidth, childHeight);

...

}

...

}

GONE的时候,并不会调用setChildFrame,getHeight的值也就不会变

    private void setChildFrame(View child, int left, int top, int width, int height) {        

        child.layout(left, top, left + width, top + height);

    }

继续往下走,childView的layout

    public void layout(int l, int t, int r, int b) {

...

        boolean changed = isLayoutModeOptical(mParent) ?setOpticalFrame(l, t, r, b) : setFrame(l, t, r, b);

...

}


    private boolean setOpticalFrame(int left, int top, int right, int bottom) {

        Insets parentInsets = mParent instanceof View ?

                ((View) mParent).getOpticalInsets() : Insets.NONE;

        Insets childInsets = getOpticalInsets();

        return setFrame(

                left   + parentInsets.left - childInsets.left,

                top    + parentInsets.top  - childInsets.top,

                right  + parentInsets.left + childInsets.right,

                bottom + parentInsets.top  + childInsets.bottom);

    }

setOpticalFrame最终也会调用setFrame

protected boolean setFrame(int left, int top, int right, int bottom) {

...

            mTop = top;

            mRight = right;

            mBottom = bottom;

...

}


当View为GONE状态时获取View的宽高

首先要明白一点就是一般情况下,我们在Activity里面的onCreate里面获取View宽高,可以采用: (1)View布局完成的监听 button.getViewTreeObserver().ad...
  • zhuhai__yizhi
  • zhuhai__yizhi
  • 2016年03月15日 16:35
  • 2070

ViewGroup setVisibility 为GONE 子View依然占用地方,其中的子EditText会出现点击焦点占用

首先,要实现的效果图如下,点击注册按钮后,进行登录表单0~90度旋转,然后注册表单-90度旋转至0度,最终实现两者的切换,但是遇到了一点问题,记录下来,以后忘记了做个参考。 使用LinearLay...
  • wuqilianga
  • wuqilianga
  • 2016年05月24日 18:22
  • 2733

控件getHeight和getWidth等于0的解决办法

http://www.eoeandroid.com/thread-240677-1-1.html 我们都知道在onCreate()里面获取控件的高度是0,这是为什么呢?我们来看一下示例:首先我们...
  • xiayu98020214
  • xiayu98020214
  • 2015年07月01日 20:01
  • 11305

Android应用——用LayoutTransition在View动态显示和隐藏时候加上动画

容器布局动画LayoutTransition的介绍 四种容器转换动画类型 将动画设置到LayoutTransition 的方法 完整代码 主函数 新建animatorxml文件 布局 容器布局动...
  • liujiaoruiIT
  • liujiaoruiIT
  • 2015年09月20日 20:46
  • 4860

android view getWidth 和 getHeight 的值为0

我们都知道在onCreate()里面获取控件的高度是0,这是为什么呢?我们来看一下示例:  首先我们自己写一个控件,这个控件非常简单: public class MyImageView exten...
  • oMaoXiaoQiang
  • oMaoXiaoQiang
  • 2014年01月08日 11:50
  • 2275

android自定义View中getWidth和getHeight返回0

在android的自定义View的构造方法,或者在Activity的onCreate方法调用view的getWidth和getHeight方法返回的值是0,可以通过以下三种方法获得width和heig...
  • xiejunjie1
  • xiejunjie1
  • 2016年03月23日 16:42
  • 1227

View绘制尚未完成,getHeight=0

更晚调用的生命周期函数 既然 onCreate() 中,控件尚未绘制完成,那么将代码写在更晚执行的一些生命周期函数中,问题是不是能得到解决呢?得到如下结果: onCreate(): Heigh...
  • pig3156661
  • pig3156661
  • 2016年04月13日 13:10
  • 200

android view.getWidth(), view.getHeight() 返回0的问题的解决方案

android开发中有很多时候需要获取view的宽高尺寸。Android中提供了View.getWidth()和View.getHeight()两个方法。但是初学者发现调用这两个方法的返回结果经常为0...
  • xutao3716
  • xutao3716
  • 2015年10月21日 10:57
  • 331

项目需求之Android 监听键盘的弹起和隐藏&setVisibility(View.GONE)方法失效

最近比较忙咯,因为在做密码密码管理模块,所以一直在跟EditText打交道,我也写了几篇跟EditText有关的博客了,今天又遇到需求了,需要监听系统键盘的弹起和隐藏。 需求大致是这样的: 1、当...
  • vv_bug
  • vv_bug
  • 2016年09月07日 22:44
  • 780

关于View的invisible和Gone的区别

先看前几天写的内容的一段XML文件
  • lingjianglin
  • lingjianglin
  • 2017年03月25日 21:39
  • 436
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:view设置gone的时候getHeight()的值
举报原因:
原因补充:

(最多只允许输入30个字)