我正在尝试根据包含它们的 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#,并且目前正在使用它(虽然它没有为我解决这个特殊问题,但它有助于阐明它,并且是帮助其他地方):