Android:如何在不考虑设备的情况下绘制具有相同大小的ImageView?

Android:如何在不考虑设备的情况下绘制具有相同大小的ImageView?,android,Android,我想在我的应用程序中放一个工具栏。工具栏将使用ImageView作为应用程序按钮。我希望ImageView的大小与设备完全相同;“相同大小”的意思是,当渲染到屏幕上时,如果我用尺子测量它们,尺寸将是相同的。我希望这个尺寸是~10mm(食指的宽度) 我完全没有成功地做到这一点 我正在测试MDPI、大屏幕Acer Iconia标签和HDPI中屏幕三星Galaxy标签。如果我设置了layout\u width=“50dip”和layout\u height=“50dip”,按钮在三星电脑上显示为~10

我想在我的应用程序中放一个工具栏。工具栏将使用ImageView作为应用程序按钮。我希望ImageView的大小与设备完全相同;“相同大小”的意思是,当渲染到屏幕上时,如果我用尺子测量它们,尺寸将是相同的。我希望这个尺寸是~10mm(食指的宽度)

我完全没有成功地做到这一点

我正在测试MDPI、大屏幕Acer Iconia标签和HDPI中屏幕三星Galaxy标签。如果我设置了
layout\u width=“50dip”
layout\u height=“50dip”
,按钮在三星电脑上显示为~10mm,在宏碁电脑上显示为~8mm。如果我将按钮设置为
layout\u width=“12mm”
layout\u height=“12mm”
,它们在Acer上渲染为12mm,在Galaxy上渲染为9mm(令人困惑的是,银河上的50dip渲染比Acer大,但银河上的12mm渲染比Acer小)

如果我在可绘制mdpi文件夹中放置一个32pix x 32pix图标(在可绘制hdpi文件夹中没有等效图标),并设置
layout\u width=“wrap\u content”
layout\u height=“wrap\u content”
;如果设置为50dip,结果与之类似,三星大约为10mm,宏基大约为8mm。如果我在我的可绘制hdpi文件夹中添加一个48pix x 48pix图标,则没有任何更改;大概是因为宏碁仍然使用mdpi图标,而三星则使用更大的图标,但由于它知道自己的hdpi,所以将其缩小了50%(如果我确信会出现这种令人惊讶的缩放,因为如果我将48pix图标移动到mdpi文件夹,而hdpi文件夹中没有任何图标,那么三星上的图标会显示非常大)


我很困惑,真的需要建议。如何使我的按钮指尖大小与dpi和屏幕大小无关

您有两种基本方法:

  • 使用提供的资源标识符(hdpi/ldpi/etc),只需依赖操作系统即可

  • 在DisplayMetrics类中使用xdpi/ydpi。它们应该返回精确的每英寸物理像素,并使用相应的比例因子手动缩放图像。当然,这会降低性能。此外,我不确定这些读数是否正确


  • 您有两种基本方法:

  • 使用提供的资源标识符(hdpi/ldpi/etc),只需依赖操作系统即可

  • 在DisplayMetrics类中使用xdpi/ydpi。它们应该返回精确的每英寸物理像素,并使用相应的比例因子手动缩放图像。当然,这会降低性能。此外,我不确定这些读数是否正确


  • 您是否尝试了无dpi资源标识符中的内容。老实说,我不知道你会从中得到什么,但值得一试。

    你有没有尝试过无dpi资源标识符中的东西。老实说,我不确定你会从中得到什么,但值得一试。

    好吧,我终于明白了发生了什么:

    问题是图像按钮的宽度被指定为10mm, 在我的Galaxy选项卡上显示为7毫米左右,在Iconia选项卡上显示为9毫米左右。 造成这种显著差异的原因有两个:

  • Iconia选项卡报告其xdpi约为160,而实际xdpi为160 大约是150
  • 蜂巢的按钮背景采用了一种新的可拉丝设计,带有 明显小于Froyo中的可提取边缘 第1期约占差额的0.6mm,第2期约占差额的0.6mm 剩下的。问题2可以通过选择其中一个来解决 背景,将其与应用程序打包,并将其指定为 ImageButton的背景。问题1无法解决,但一旦问题2得到解决,它所造成的差异相对较小

    好吧,我终于弄明白了到底发生了什么:

    问题是图像按钮的宽度被指定为10mm, 在我的Galaxy选项卡上显示为7毫米左右,在Iconia选项卡上显示为9毫米左右。 造成这种显著差异的原因有两个:

  • Iconia选项卡报告其xdpi约为160,而实际xdpi为160 大约是150
  • 蜂巢的按钮背景采用了一种新的可拉丝设计,带有 明显小于Froyo中的可提取边缘 第1期约占差额的0.6mm,第2期约占差额的0.6mm 剩下的。问题2可以通过选择其中一个来解决 背景,将其与应用程序打包,并将其指定为 ImageButton的背景。问题1无法解决,但一旦问题2得到解决,它所造成的差异相对较小

    2听起来是个不错的解决方案。我不关心性能,因为大小计算很简单,在UI初始化时只需进行一次。然而,xdpi/ypdi的准确性是一个巨大的问题。其他人能插手这个问题吗?不知怎么的,这在银河系是行不通的。我设置布局宽度=168.89*10/25.4=66。66像素宽,6.64dpmm(168.89dpi/25.4mmpi)时应=~10mm。但是,按钮的尺寸约为8毫米。银河系必须以某种方式缩小布局参数。有没有办法找到它们缩小了多少,以便我可以进行调整?不幸的是,DisplayMetrics类提供的值不能依赖。许多设备没有向OS报告正确的值。2听起来是一个很好的解决方案。我不关心性能,因为大小计算很简单,在UI初始化时只需进行一次。然而,xdpi/ypdi的准确性是一个巨大的问题。其他人能插手这个问题吗?不知怎么的,这在银河系是行不通的。我设置布局宽度=168.89*10/25.4=66。66像素宽,6.64dpmm(168.89dpi/25.4mmpi)时应=~10mm。但是,按钮的尺寸约为8毫米。银河系必须以某种方式缩小布局参数。有没有办法知道他们有多少钱