Android不同值文件夹中Dimens值的计算方法

7
我正在为一些UI组件提供dimen值大小。我的UI需要支持所有设备的纵向模式,因此我将我的dimen文件放入16个文件夹中。
首先,我在“values-normal-xhdpi”中插入了值(因为我有测试设备)。现在,我已经为“values-normal-xhdpi”文件夹构建了我的dimen文件。现在,我正在通过再次检查正常-hdpi屏幕的视觉效果,在“values-normal-hdpi”中进行条目输入。这真是一项繁琐的任务,我需要一些公式,以便我可以评估剩余文件夹的dimens值。
一些Android标准规定,drawable图像应该按以下比例: ldpi = 0.75 mdpi = 1.0 hdpi = 1.5 xhdpi = 2
但是这在这里不起作用,因为在“values-normal-mdpi”中,100 dp的dimen值并不能像在“values-normal-hdpi”中的150 dp给出相同的效果。
我的“values-normal-xhdpi”的dimens.xml如下:
<resources>
    <!-- this is used in note -->
    <dimen name="text_size_h1">60sp</dimen>
    <dimen name="text_size_h2">50sp</dimen>
    <dimen name="text_size_h3">40sp</dimen>
    <dimen name="text_size_h4">30sp</dimen>
    <dimen name="text_size_h5">24sp</dimen>
    <dimen name="text_size_h6">20sp</dimen>

    <dimen name="text_size_h8">11sp</dimen>
    <dimen name="text_size_h10">10sp</dimen>
    <dimen name="text_size_h12">8sp</dimen>


    <dimen name="extra_mini">2dp</dimen>


    <dimen name="mini">4dp</dimen>
    <dimen name="x_mini">10dp</dimen>
    <dimen name="xx_mini">14dp</dimen>
    <dimen name="xxx_mini">20dp</dimen>

    <dimen name="mid">30dp</dimen>
    <dimen name="x_mid">40dp</dimen>
    <dimen name="xx_mid">50dp</dimen>
    <dimen name="xxx_mid">60dp</dimen>

    <dimen name="max">70dp</dimen>
    <dimen name="x_max">62dp</dimen>
    <dimen name="xx_max">90dp</dimen>
    <dimen name="xxx_max">100dp</dimen>

    <dimen name="supper">110dp</dimen>
    <dimen name="x_supper">120dp</dimen>
    <dimen name="xx_supper">130dp</dimen>
    <dimen name="xxx_supper">140dp</dimen>

    <dimen name="xxxxxx_supper">180dp</dimen>

    <dimen name="image_width">628dp</dimen>
    <dimen name="image_height">270dp</dimen>

</resources> 

你所需要的只有 values(即 values-normal)、values-large,以及可能的 values-xlargevalues-small。以 dp 为单位的尺寸会根据设备的像素密度自动转换,因此你只需要提供不同的尺寸来根据屏幕大小缩放 UI 元素(例如,在较大的屏幕上使用更大的边距)。 - 323go
1个回答

3
"dp"是指密度无关像素。在mdpi中,100dp表示100px,在hdpi中表示150px,在xhdpi中表示200px等等。
这意味着,如果您始终使用dp(这是一个好主意),则不需要为每个密度变量指定值,它们会自动转换为每个像素值。
请参见http://developer.android.com/guide/practices/screens_support.html#terms

密度无关像素(dp)

定义UI布局时应使用的虚拟像素单位,以一种密度无关的方式表达布局尺寸或位置。密度无关像素相当于160dpi屏幕上的一个物理像素,这是系统对“中等”密度屏幕的基线密度假设。在运行时,系统会根据实际使用的屏幕密度,透明地处理任何dp单位的缩放。


当我将按钮的宽度设置为100dp时,它在所有设备上都不会产生相同的效果。我们必须在不同的values文件夹中提供dimen值。 - Vibhor Bhardwaj
有些设备是240dp,因此在160dp和240dp设备上,dp会产生不同的效果。 - Vibhor Bhardwaj
小心,看起来你把dpi(即hdpi屏幕为240dpi)和dp混淆了?一个大小指定为100dp的按钮在每个设备上应该“大致相同大小”,而不考虑其显示密度。 - matiash
等等,这意味着如果我使用dp来指定所有值,那么我就不需要为不同的设备进行调整。如果我将某些内容写成100dp,那么它将自动适用于所有设备,无论是hdpi/xhdpi/mdpi等。那我为什么还要有不同的值文件夹,比如values-sw800dp、values-sw800dp-xhpdi等等?只有一个包含适用于所有设备的dp尺寸的values文件夹不就足够了吗? - user2759617
@user2759617 -swXXXdp 是为了在不同逻辑尺寸的屏幕上使用不同的资源(比如手机或平板电脑)。此外,虽然 dp 对于视图大小来说很好,但位图和其他资源应该有不同密度的变体。 - matiash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接