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;

...

}


相关文章推荐

android view getWidth 和 getHeight 的值为0

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

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

在android的自定义View的构造方法,或者在Activity的onCreate方法调用view的getWidth和getHeight方法返回的值是0,可以通过以下三种方法获得width和heig...

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

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

View---visibility属性VISIBLE、INVISIBLE、GONE的区别

在Android开发中,大部分控件都有visibility这个属性,其属性有3个分别为“visible ”、“invisible”、“gone”。主要用来设置控制控件的显示和隐藏。...

关于View的invisible和Gone的区别

先看前几天写的内容的一段XML文件

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

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

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

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

Android的setVisibility(View.GONE)不起作用在使用Animation之后.

出现这种情况很可能是因为设置了animation,并且调用了setFillAfter(true),这就会导致setVisibility无效,只需要调用一下clearAnimation()方法或者去掉s...

Android---重新认识view--Visiable\Invisiable\Gone属性

------ 对于一切模糊的事情,我总要亲自试一试,找到最清晰的答案,并记录下来 ------ View的3个属性Visiable\Invisiable\Gone官方说明 case R.id.b...
  • musk6
  • musk6
  • 2017年03月17日 11:22
  • 125

android连续调用setVisibility(View.VISIBLE)和setVisibility(View.Gone)

利用setsetVisibility实现显示和隐藏loading界面的功能
  • cc752
  • cc752
  • 2017年03月17日 11:42
  • 456
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:view设置gone的时候getHeight()的值
举报原因:
原因补充:

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