【问题标题】:Check if a LinearLayout has a Clipped Child检查 LinearLayout 是否有 Clipped Child
【发布时间】:2018-06-20 17:47:25
【问题描述】:

我有一个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>

【问题讨论】:

  • @Rahandi jalu 是否可以在下一行显示溢出的项目,
  • @war_Hero 这些项目更像是一个右侧有列的表格,因此它需要在一行中
  • 好的,为什么不使用recyclerview来做呢?
  • @war_Hero 我认为不会,因为我想避免使用适配器,并且我需要访问单个项目的视图以实现高级 UI 目的

标签: android android-layout


【解决方案1】:

通过使用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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 2020-01-09
    • 1970-01-01
    • 2013-06-24
    • 2015-04-11
    相关资源
    最近更新 更多