android - 使用 dip 的目的是什么?

标签 android

我是 Android 开发的新手,我正在努力使我的应用程序适应各种分辨率。我最近听说了 dip 的概念,但我不明白这个单元的目的。我知道无论屏幕分辨率如何,它都允许显示具有相同物理尺寸的内容。

但问题是它不适用于不同的屏幕密度。我的意思是,如果我定义一个宽度为 80dip 的图像,那么在 160dpi 屏幕和 320dpi 屏幕上结果不会相同。因此,如果我每次都要编写一些代码以使组件适应设备,我就不会真正理解这个单元的目的。

我如何在 xml 中定义布局(无需任何代码,不需要:/)以便此 View 在每个设备上都相同(或几乎相同)?

我真的不明白为什么不能在布局 (xml) 中使用百分比而不是那种单位。

非常感谢您的帮助。

PS:对不起我的英语:(

最佳答案

dip(也称为 dp)的概念是无论显示器的物理像素密度如何,都具有相同大小的虚拟像素。

1dp = 1 pixel at 160 pixels/inch (medium density display—mdpi)

在较高的像素密度下,1dp 大于一个物理像素,而在较低的密度下,需要超过 1dp 才能达到一个物理像素的大小。

如果您以 px 为单位指定大小,则您指定的是物理像素,在高密度设备上,同一对象将显得更小。

图像通常根据它们所在的资源文件夹进行缩放。如果将 .png 文件放在 /res/drawable 中,系统会假定它的大小适合 mdpi——160 像素/英寸的显示密度。如果实际显示恰好是 240 像素/英寸 (hdpi),系统会在加载图像时自动将图像缩放 1.5 倍(= 240/160)。结果是图像将在所有屏幕密度上以相同的物理尺寸显示。

您可以使用特定于密度的资源文件夹(/res/drawable-mdpi/res/drawable-hdpi 等)为不同的密度提供不同的图形;当系统缩放将图像质量降低到 Not Acceptable 程度时,通常会这样做。您还可以将图形放在 /res/drawable-nodpi 中以抑制这种缩放。

有关详细信息,请阅读教程 Supporting Different Densities

关于android - 使用 dip 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19126676/

相关文章:

android - 如何在opencv android中导入IplImage类?

php - Android:网络托管公司对 WhatsApp 等应用程序的推荐

android - 有什么方法可以通过 LAN 网络通过 PC 完全控制我的 android 手机?

android - 在选定的微调项上显示编辑文本

android - 从 ActivityManager 获取 Activity

java - NoClassDefFoundError : . .. 将 Robolectric 与 Android 库 (AAR) 结合使用时 R$styleable

java - 库中的 Monodroid JNIEnv.FindClass

java - 在 Android 中使用 MapStruct 来映射泛型类型?

android - 禁用屏幕捕获功能

android - 如何在 iOS 和 android 中实现 YouTube LiveStream 播放器?