查看与可见性状态GONE占用屏幕上的空间

Ada*_*dam 7 android android-widget android-layout

我遇到一个问题,其中可见性状态为GONE的视图(不合需要地)占用屏幕上的空间.始终在API级别<= 7设备上出现此问题,但最近仅在8个以上的设备上发生(在我使用AsyncTasks填充某些字段后,根据"加载活动时显示进度条")

一点上下文:我创建了一个扩展LinearLayout的自定义视图,其中包含一个"标题"按钮和(用户定义;在某些情况下,它是一些TextViews,在其他情况下,它是TableLayouts)"contents".这个视图的目的是切换内容onClick标题按钮的视图(我不相信有一个内置的小部件...我可能是错的).

在onLayout()中,我明确地将所有子视图的可见性状态设置为GONE,第一次绘制时除了标题:

protected void onLayout(boolean changed, int l, int t, int r, int b) {
    if(initialDraw) {
        setContentsVisible(false);
        initialDraw = false;
    }
    super.onLayout(changed, l, t, r, b);
}

public void setContentsVisible(boolean visible) {
    for(int i = 0; i < getChildCount(); i++) {
        View child = getChildAt(i);

        if(child != mTitle) {
            child.setVisibility(visible ? VISIBLE : GONE);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*lov 0

好的。我根本不明白它是如何在你的情况下吸引任何东西的。但我认为你应该在检查后调用 super.onLayout() 。像这样:

protected void onLayout(boolean changed, int l, int t, int r, int b) {
    if(initialDraw) {
        setContentsVisible(false);
        initialDraw = false;
    }
    super.onLayout(l,t,r,b);
}
Run Code Online (Sandbox Code Playgroud)

LinearLayout 决定如何在 onLayout() 中布局它的子级(垂直或水平),但您没有调用它。更重要的是,选择后,它实际上开始计算如何布局每个子项,如果子项的可见性消失,它会跳过它(意味着子项不会占用任何空间)。我认为在你的情况下,根本不会布置和展示任何孩子,但我可能在某个地方错了。