0

我正在尝试根据包含它们的 ViewGroup 的尺寸来计算子布局/视图的宽度和高度。

我正在尝试考虑每个孩子的边际价值,但似乎无法完全正确。

我已经在阳光下尝试了所有转换(dip、sp、px、in、mm),但仍然得出相同的结论,即边距值被转换为比任何其他维度值都小得多的像素值(即宽度和高度)。

我需要这个转换因子。我尝试了很多方法来计算它(Context.Resources.DisplayMetrics - Density、DensityDpi、ScaledDensity),但都没有成功。

我不相信这个转换因子可以从运行时可用的任何值中获取或派生,因此想知道是否有人知道它是什么(或者在哪里可以找到或计算它)。


为了提供一些背景信息,我正在实现一个自定义日历,其中包含一个 5x7 网格的子布局(LinearLists),其中每个子元素周围都有边距。

最外面的view是RelativeLayout,它的宽高分别是W和H,边距宽度是M。所以,你会认为

CELL_WIDTH = W/7 - M*7
CELL_HEIGHT = H/5 - M*5

然而,边距宽度因子 M*7 和 M*5 最终太大了,导致整个网格小于父视图(这是一个问题,我需要填充它)。

我在这里和其他地方的帖子中尝试了很多不同的转换技术,但都没有成功。我确信 android 使用一些转换因子在内部存储边距值(我假设它以像素为单位)。这是我所追求的转换因子(当然,除非有人知道更好/正确的方法来执行我在这里尝试的计算)。

以下是我尝试过的链接,我什至将其中一个 Java 解决方案转换为 C#,并且目前正在使用它(虽然它没有为我解决这个特殊问题,但它有助于阐明它,并且是帮助其他地方):

如何解析维度字符串并将其转换为维度值

4

1 回答 1

0

哦,天哪,我是个白痴!

我已经研究了很长时间,以至于我什至没有认为这个等式是有缺陷的。

对于每个单元格大小,我应该只削减 1 个边距宽度/高度,而不是全部,这是当前等式所做的。

所以,正确的方程是:

CELL_WIDTH = W/7 - M 
CELL_HEIGHT = H/5 - M

呃,我觉得很傻。

于 2012-10-04T12:58:12.473 回答