gpt4 book ai didi

android - 被其父级裁剪的 Android View 的全尺寸

转载 作者:太空狗 更新时间:2023-10-29 13:33:21 24 4
gpt4 key购买 nike

请看一下这个 xml 布局。

    <LinearLayout android:id="@+id/dataTableContainer"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:clipChildren="true">

<LinearLayout android:id="@+id/dataTable"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"/>

</LinearLayout>

在运行时,“dataTable”元素填充了比“dataTableContainer”可以显示的更宽的子元素。但是,当我在 eclipse 中检查两个元素的 mMeasuredWidth(或者甚至是 getWidth() 的返回值)时,结果发现它们完全相同。这不应该是这样的。我的理解是,“dataTable”的子项应该根据其“wrap_content”设置插入它假设自己的宽度。相反,“dataTableContainer”应该比那个小,因为它的“fill_parent”设置受屏幕尺寸的限制。

我还尝试将“clipChildren”设置为 false,以防宽度被容器剪切但结果保持不变:表格和容器具有相同的宽度。

谁能解释一下这是怎么回事?

为了给您一些上下文,我正在尝试做的是收集这些元素的大小,以确定有多少“dataTable”元素位于容器外部,因此不可见。这反过来又需要限制用户可以拖动表格元素的距离。 ScrollView 元素本身限制了运动,但由于我使用的是 LinearLayout,所以我需要复制该限制功能。

最佳答案

看来我对 Eclipse 过于信任了。在使用断点调试以检查应用程序的状态和许多可用变量的值时,我依赖于 eclipse 提供的变量列表,其中包括 mMeasuredWidth/mMeasuredHeight。请注意,这些不是我源代码中的变量。 Eclipse 以某种方式自己找到了它们,为我检查了这些对象。因此,我假设它们确实以某种方式代表了测量的宽度/高度。然而,我的假设是错误的,如果仅仅是因为可以用不同的方式测量 View (即使用 MeasureSpec.UNSPECIFIED 或 MeasureSpec.EXACTLY)并且 Eclipse 不知道我需要哪种测量。

因此,我通过添加到我的代码来触发我需要的测量:

int measureSpecParams = View.MeasureSpec.getSize(View.MeasureSpec.UNSPECIFIED);
dataTableView.measure(measureSpecParams, measureSpecParams);
int measuredWidth = dataTableView.getMeasuredWidth();
int measuredHeight = dataTableView.getMeasuredHeight();

这确实给了我想要的 View 大小,即如果父 View 或屏幕限制“dataTable” View 的大小。

关于android - 被其父级裁剪的 Android View 的全尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13214906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com