【问题标题】:Can Android support dp's less than 1dp?Android可以支持dp小于1dp吗?
【发布时间】:2018-04-10 00:51:16
【问题描述】:

我正在制作日历,我需要一个网格。问题是边界,或者更确切地说是每个网格之间的空间,这是我用来模拟网格的,是 1 dp。但是比较厚。我正在寻找其他有边框的日历应用程序,它们非常薄。即使我要使用drawable 形状并将其设为 1dp,它仍然具有该厚度。我尝试使用 0.5,但这似乎不起作用。这不可能吗?

【问题讨论】:

    标签: android


    【解决方案1】:

    Android 允许您将 dp 的小数值输入 XML,但我不确定我是否会推荐它,因为结果变得不太容易预测/计算。设备使用(基本上)以下公式将dp 值转换为像素:

    px = (int)(scale * dp + 0.5)
    

    (即设备密度刻度四舍五入到最接近的整个像素值)

    scale 值将基于设备的屏幕密度:

    • MDPI = 1
    • HDPI = 1.5
    • XHDPI = 2
    • XXHDPI = 3

    所以0.5dp 将导致上述密度为 {1px, 1px, 1px, 2px},而1dp 将是 {1px, 2px, 2px, 3px}。像0.1dp 这样的小值将解析为 {1px, 1px, 1px, 1px} 因为上述公式中小于 1 的任何值都会解析为单个像素,除非该值明确为 0dp(不可能绘制比单个像素宽度)。

    如果您想确保使用尽可能薄的宽度,最好使用px 明确定义宽度,而不是像dp 这样的缩放单位。设置1px 的值将在所有设备上使用单个像素进行绘制,并且比希望0.5dp0.1dp 执行相同操作更具可读性。

    【讨论】:

    • px 是个好主意——让每台设备都能做到最好。谢谢!
    【解决方案2】:

    是的。

    我设置为 0.1dp,在我的 4" ME860 DRIOD 上它小于 1dp。

    【讨论】:

    • 这似乎取决于设备。我看到一个 0.5dp 的边框,它显示在我的 Nexus 4 上,但没有显示在第一代 Kindle 上。
    【解决方案3】:

    简单的答案是肯定的,你可以。

    为您的问题提供简单的解决方案(即实现最细的线)将thickness 设置为: 1像素

    我建议 px 因为它不依赖于设备,它是可用的最小度量,而且它不会转换为另一种形式,因此不会出现舍入错误或任何意外渲染......让我解释一下。

    Android 布局 xml 文件或尺寸 xml 值文件将允许您为 dp 输入十进制值。

    但是: 我已经在许多设备上尝试了从 0.1dp 到 1dp 的几个值。取决于设备 - 它可能不会像您预期的那样呈现。

    在像素密度较低的设备上,与另一侧相比,线条可能在一侧渲染得更粗,即使它们被编码为具有相同的...这是由于截断转换为 dp 到 px 值时引入的不准确性 - (正如 Devunwired 提到的):

    px = (int)(scale * dp + 0.5)
    

    像素(px)是最小单位,必须是整数。所以 - 如果您的目标只是拥有尽可能小的线条/边框,为什么不将其设置为:

    1像素

    我希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-27
      • 2016-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      相关资源
      最近更新 更多