使用 dpi 与 dp 缩放图像之间的差异
Differences between scaling images with dpi as opposed to dp
我有所有 dpi 可绘制目录(xxhdpi 和 xxxhdpi 甚至是必要的吗?)由九个补丁位图组成,可绘制目录中的可绘制资源文件检索所有缩放位图,我设置了背景带有可绘制资源文件的按钮...现在,我的问题是我还根据大小(小,正常等)创建了 "scaled" 布局目录,我试图在其中手动更改 dp按钮如下:
这是我的 xhdpi 位图:
...但是在layout-large目录下的Nexus 7虚拟模拟器(7.0", 1200X1920: xhdpi)上显示是这样的:
...当我手动将其中一个按钮的 dp 大小更改为 200 时:
^^^ 顺便问一下,我的目录看起来怎么样? ... 为什么按钮会这样显示? ^^^
综上所述,我只是不明白为什么我们需要基于密度的可绘制目录(mdpi、hdpi、xhdpi 等)以及 布局资源目录,当我们可以简单地修改每个独特布局中关于屏幕尺寸(小、正常等)的图像 dp 时。
@dpark14 我基本上已经回答了你昨天在 post 中提出的问题:
- 也许您应该编辑最后一个问题以包含上面的代码和图像,以便将其合并。
- 正如我在回答中所说(以及其他评论之一所说):
It is entirely up to you if you want to change the layout width and height (in dp) of an imageButton. There is certainly nothing wrong with setting width and height of an imageButton or any UI element for that matter, in each unique layout resource file for various screens. Did you have specific code you wanted to get feedback about?
现在你已经包含了一些图片,我可以看到你的一些东西。
你真的应该看看这个:
再次阅读 Android 文档会对您有所帮助:
http://developer.android.com/guide/practices/screens_support.html
总结几个总体思路:
您不需要 default 可绘制文件夹,但您应该具有以下内容:
- drawable-mdpi(中)~160dpi
- drawable-hdpi(高)~240dpi
- drawable-xhdpi(超高)~320dpi
- drawable-xxhdpi(超高)~480dpi
- drawable-xxxhdpi(超高超高)~640dpi
正如 Android 文档在上面的 link 中所说:
Your application achieves "density independence" when it preserves the physical size (from the user's point of view) of user interface elements when displayed on screens with different densities.
而不是:
如果出于某种原因(看起来您遇到了问题)您已经实现了密度独立性,但您的图像不适合,这时您可以开始介入更改 w/h 和 res/layout
同样来自我之前的回答:
As you alluded to: you could create different res/dimens directories for various devices based on "minimums" e.g. w800dp/dimens.xml and then create elements in that specific dimens.xml e.g. values-w411/dimens.xml for width and height that correspond with your images that aren't fitting well when you test your app.
作为第一步,也许您应该尝试一下。是的,这需要时间,但请先尝试独立于您的应用程序的测试。只需添加一张图片(也许是您遇到问题的那张)。看看当您将它加载到模拟器中的不同 Nexus 设备时会发生什么。图像是否达到 "density independence" 即跨设备保留物理尺寸?如果是这样,并且它的 w/h 与特定设备的限制有关, 正如我在之前的回答中所说,现在在这里 ,创建一个 dimens 目录(在 values-... 目录中)专门针对问题设备并针对该特定图像或视图更改 layout_width/layout_height。
有关特定设备的更多信息 w/h:https://design.google.com/devices/
我有所有 dpi 可绘制目录(xxhdpi 和 xxxhdpi 甚至是必要的吗?)由九个补丁位图组成,可绘制目录中的可绘制资源文件检索所有缩放位图,我设置了背景带有可绘制资源文件的按钮...现在,我的问题是我还根据大小(小,正常等)创建了 "scaled" 布局目录,我试图在其中手动更改 dp按钮如下:
这是我的 xhdpi 位图:
...但是在layout-large目录下的Nexus 7虚拟模拟器(7.0", 1200X1920: xhdpi)上显示是这样的:
...当我手动将其中一个按钮的 dp 大小更改为 200 时:
^^^ 顺便问一下,我的目录看起来怎么样? ... 为什么按钮会这样显示? ^^^
综上所述,我只是不明白为什么我们需要基于密度的可绘制目录(mdpi、hdpi、xhdpi 等)以及 布局资源目录,当我们可以简单地修改每个独特布局中关于屏幕尺寸(小、正常等)的图像 dp 时。
@dpark14 我基本上已经回答了你昨天在 post 中提出的问题:
- 也许您应该编辑最后一个问题以包含上面的代码和图像,以便将其合并。
- 正如我在回答中所说(以及其他评论之一所说):
It is entirely up to you if you want to change the layout width and height (in dp) of an imageButton. There is certainly nothing wrong with setting width and height of an imageButton or any UI element for that matter, in each unique layout resource file for various screens. Did you have specific code you wanted to get feedback about?
现在你已经包含了一些图片,我可以看到你的一些东西。
你真的应该看看这个:
再次阅读 Android 文档会对您有所帮助: http://developer.android.com/guide/practices/screens_support.html
总结几个总体思路: 您不需要 default 可绘制文件夹,但您应该具有以下内容:
- drawable-mdpi(中)~160dpi
- drawable-hdpi(高)~240dpi
- drawable-xhdpi(超高)~320dpi
- drawable-xxhdpi(超高)~480dpi
- drawable-xxxhdpi(超高超高)~640dpi
正如 Android 文档在上面的 link 中所说:
Your application achieves "density independence" when it preserves the physical size (from the user's point of view) of user interface elements when displayed on screens with different densities.
而不是:
如果出于某种原因(看起来您遇到了问题)您已经实现了密度独立性,但您的图像不适合,这时您可以开始介入更改 w/h 和 res/layout
同样来自我之前的回答:
As you alluded to: you could create different res/dimens directories for various devices based on "minimums" e.g. w800dp/dimens.xml and then create elements in that specific dimens.xml e.g. values-w411/dimens.xml for width and height that correspond with your images that aren't fitting well when you test your app.
作为第一步,也许您应该尝试一下。是的,这需要时间,但请先尝试独立于您的应用程序的测试。只需添加一张图片(也许是您遇到问题的那张)。看看当您将它加载到模拟器中的不同 Nexus 设备时会发生什么。图像是否达到 "density independence" 即跨设备保留物理尺寸?如果是这样,并且它的 w/h 与特定设备的限制有关, 正如我在之前的回答中所说,现在在这里 ,创建一个 dimens 目录(在 values-... 目录中)专门针对问题设备并针对该特定图像或视图更改 layout_width/layout_height。
有关特定设备的更多信息 w/h:https://design.google.com/devices/