我有Activity
将项目显示为列表,但我还需要能够水平滚动项目,因为它们可能会将屏幕重叠到右侧。为此,我用HorizontalScrollView
包裹了我的容器。
我想将我的项目添加到一个以编程方式垂直定向LinearLayout
的容器中,即在for循环中使用addView()
。正如我之前提到的那样,它被包裹在HorizontalScrollView
中,用户无法垂直滚动项目,因此我需要对其进行分页。希望这个例子可以让你更好地理解。
我的问题是,如何在最近的页面上知道我的容器是否已经装满了,所以我需要将剩余的项目添加到下一页?我已使用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>
答案 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;
}