我对密度无关像素的理解是,无论屏幕dpi和尺寸如何,它都会呈现相同的大小。我创建了一个高度为50dip的图像按钮。在我的中型dpi三星Galaxy Tab上,这个按钮尺寸约为10mm x 10mm(用尺子测量。在我的大型hdpi Acer Iconia标签上,按钮的尺寸约为7mm x 7mm。我原本预计两个按钮的尺寸相同我做错了什么,或者我的理解不正确?
答案 0 :(得分:2)
你的方法是错误的,Galaxy Tab是HDPI
而Acer Tab是MDPI
。
50个像素在MDPI
设备上为50像素,在HDPI
设备上为75像素,应该转换为大致相同的物理尺寸。
然而,由于3.0平板电脑的屏幕尺寸要大得多,因此情况略有不同。在这些情况下,通常使用HDPI
资产可以提供更好的尺寸。
答案 1 :(得分:2)
以前的答案都是正确的。问题在于不仅改变了内部的大小,还改变了总像素的数量。
对于解决方案,您需要在res/layout-normal
和res/layout-large
中创建不同的xml布局文件,以调整屏幕分辨率更改。尽管如此,鉴于这些文件夹对设备范围进行了分组,您的尺寸会有所不同。
或者,如果您对视图严格要求特定的固定大小,请将其宽度和高度设置为"10mm"
public static final int layout_width Since: API Level 1
指定视图的基本宽度。这是包含布局管理器内任何视图的必需属性。它的值可以是恒定宽度的维度(例如“12dip”)或特殊常量之一。
可以是维值,它是附加有诸如“14.5sp”的单位的浮点数。可用单位为:px(像素),dp(与密度无关的像素),sp(基于首选字体大小的缩放像素),英寸(mm),毫米(毫米)。
http://developer.android.com/reference/android/R.attr.html#layout_width
有关屏幕尺寸,分辨率和dpi值的列表,请查看:http://en.wikipedia.org/wiki/List_of_displays_by_pixel_density
要计算实际dpi值,请点击此处:http://en.wikipedia.org/wiki/Pixel_density#Calculation_of_monitor_PPI
答案 2 :(得分:0)
来自:http://developer.android.com/guide/practices/screens_support.html(强调补充)
与密度无关的像素(dp) 在定义UI布局时应使用的虚拟像素单元,以与密度无关的方式表达布局尺寸或位置。 与密度无关的像素相当于160 dpi屏幕上的一个物理像素,这是系统为“中等”密度屏幕假定的基线密度。在运行时,系统根据使用的屏幕的实际密度,根据需要透明地处理dp单元的任何缩放。 dp单位到屏幕像素的转换很简单:px = dp *(dpi / 160)。例如,在240 dpi屏幕上,1 dp等于1.5个物理像素。在定义应用程序的UI时,应始终使用dp单位,以确保在不同密度的屏幕上正确显示UI。