android - 查看可见性状态 GONE 占用屏幕空间

标签 android android-widget android-layout

我遇到了一个问题,即可见性状态为 GONE 的 View (不希望地)占用了屏幕空间。这个问题总是发生在 API 级别 <= 7 的设备上,但最近才发生在 8+ 设备上(在我使用 AsyncTasks 填充一些字段之后,根据 Show a progress bar when an Activity is loading )

一点背景: 我创建了一个扩展 LinearLayout 的自定义 View ,其中包含一个“标题”按钮和(用户定义;在某些情况下,它是一些 TextView,在其他情况下它是 TableLayouts)“内容”。此 View 的目的是在点击标题按钮时切换内容 View (我不相信有一个内置的小部件可以做到这一点。我可能是错的)。

在 onLayout() 中,我明确地将除标题之外的所有 subview 的可见性状态设置为 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);
        }
    }
}

最佳答案

将代码从 onLayout() 移至 onMeasure() 即可解决问题。

关于android - 查看可见性状态 GONE 占用屏幕空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4899389/

相关文章:

Android Froyo WebView 不垂直滚动

Android - ListView 和标签

android - 满足条件时从屏幕底部显示 ListView(所有项目可见)

android - 事件代码 - Google 跟踪代码管理器 + Firebase + Google Analytics

android - 用户词典ContentResolver查询返回0行游标

java - 可绘制动画结束时进入新 Activity

java - 如何在LayerList android的中心添加图像

android - 在 Activity 中强制执行自定义权限并添加为 Intent Filter

android - Activity 中的滑动效应

android - 如何在 Android 中从矩形位图创建方形位图