检查LinearLayout是否有Clipped Child

时间:2018-06-18 08:50:09

标签: android android-layout

我有Activity将项目显示为列表,但我还需要能够水平滚动项目,因为它们可能会将屏幕重叠到右侧。为此,我用HorizontalScrollView包裹了我的容器。

我想将我的项目添加到一个以编程方式垂直定向LinearLayout的容器中,即在for循环中使用addView()。正如我之前提到的那样,它被包裹在HorizontalScrollView中,用户无法垂直滚动项目,因此我需要对其进行分页。希望这个例子可以让你更好地理解。

problem

我的问题是,如何在最近的页面上知道我的容器是否已经装满了,所以我需要将剩余的项目添加到下一页?我已使用View.GlobalVisibleRect(Rect r)解决方法How do I tell when an image is clipped?检查了视图是否被裁剪,但仍然没有运气。谢谢。

xml结构:

<HorizontalScrollView>
    <LinearLayout android:orientation="vertical">

        <!-- The programmatically added item views should goes here. -->

    </LinearLayout>
</HorizontalScrollView>

1 个答案:

答案 0 :(得分:0)

通过使用View.getMeasuredHeight()测量容器布局的高度来解决此问题,然后再将其与测量的物品高度相减,因此代码将类似于:

LinearLayout container = findViewById(R.id.container);

...

int rowHeight = 0;

container.measure(0,0);
int availableHeight = container.getMeasuredHeight();

while (availableHeight > rowHeight) {
    View toAdd = new View(this);

    ... // Do something with view and data

    container.addView(toAdd);

    toAdd.measure(0,0);
    rowHeight = toAdd.getMeasuredHeight();
    availableHeight -= rowHeight;
}