Android:如何计算dp?

Android:如何计算dp?,android,layout,size,dpi,Android,Layout,Size,Dpi,我知道关于这个问题有N条线索,但我仍然不知道如何在Android上应用widget(按钮、图像)的宽度和高度 我读过: 还有很多其他的线索,但我不明白 我应该如何计算按钮的dpi 我需要知道设备的dpi吗?(维基百科列表): 但是还有很多其他设备具有不同的dpi 我有一个photoshop设计(800x480)和一个按钮(290x65)。我已经在android项目中新创建的“drawable”文件夹中保存并导入了图像按钮。在XML(布局)中,我插入了带有导入按钮图像的ImageView <

我知道关于这个问题有N条线索,但我仍然不知道如何在Android上应用widget(按钮、图像)的宽度和高度

我读过: 还有很多其他的线索,但我不明白

我应该如何计算按钮的dpi

我需要知道设备的dpi吗?(维基百科列表):

但是还有很多其他设备具有不同的dpi

我有一个photoshop设计(800x480)和一个按钮(290x65)。我已经在android项目中新创建的“drawable”文件夹中保存并导入了图像按钮。在XML(布局)中,我插入了带有导入按钮图像的ImageView

<ImageView
   android:id="@+id/btnNewImage"
   android:layout_width="210dp"
   android:layout_height="50dp"
   android:layout_marginLeft="10dp"
   android:layout_marginTop="7dp"
   android:src="@drawable/new_image" />


插入的图像完全不同,它更大。我应该如何计算Android尺寸的准确宽度和高度值?

如果您需要了解设备的dpi,请使用以下代码片段:

 int dpi = getResources().getDisplayMetrics().densityDpi;
如果要将dp转换为像素:

 int px = (int)(dp * getResources().getDisplayMetrics().density + 0.5f);
如果要将像素转换为dp:

 int dp = (int)(px / getResources().getDisplayMetrics().density + 0.5f);

要使您的图像显示为正确的大小,您需要将其放入正确的“drawable”文件夹中。例如,如果您有一个48x48像素的图标,它应该是可绘制的mdpi。理想情况下,您应该为每个文件夹创建图形,以便Android可以根据屏幕大小和分辨率选择最佳文件夹

我对我的图标使用以下指导原则(我从某个现在已被遗忘的地方收集到的);您可以根据这些参数推断出需要的像素尺寸:

Recommended drawable sizes - to match size of launcher icon, about 3/8"
36x36 - low
48x48 - med
72x72 - high
96x96 - extra high

查看此处的比例因子:对于hdpi,将其设置为大小的1.5倍,并将其放置在hdpi文件夹中;对于xhdpi,将其设置为大小的2倍,依此类推。1dp=1像素@160dpi。在你链接到的页面上有一个公式可以解释dp像素转换。也许可以帮助阅读:等等,为什么是0.5f?它应该是密度,然后对结果进行四舍五入。它可以四舍五入到最接近的整数,而不是四舍五入。(在他们的代码示例中也是如此。)很有趣。每天学习新东西。:)我猜这是为了确保它至少有1像素,也许吧。建议
px=dp*(dpi/160)