0

我使用一个带有图像作为背景的按钮,该图像的大小为 30x29,但它已调整大小并放大 x2(我认为)。这是我的按钮的 XML 代码:

<Button
        android:id="@+id/buttonBack"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="12dp"
        android:layout_marginTop="10dp"
        android:background="@drawable/bouton_back"
        android:maxHeight="30dp"
        android:maxWidth="30dp" />

在 Java 中:

backButton = (Button) findViewById(R.id.buttonBack);

那有什么问题?我对其他按钮也这样做,没有问题......谢谢。

4

3 回答 3

1

我认为这可能是文件夹问题。你把图像文件放在哪里了?(如果你有它可能不会有问题drawable-hdpi

编辑

ps - 还有一个 dp 单位的东西,它与像素无关。

于 2012-07-09T16:01:26.827 回答
1

您正在使用背景属性,android 将根据 dpi 中的设备分辨率(ldpimdpihdpixhdpi屏幕)拉伸您的图像,如果您将图像放在 drawable-mdpi 文件夹中,您的图像将根据此系数进行拉伸

在此处输入图像描述

于 2012-07-09T16:31:23.137 回答
1

您是否bouton_back使用多种密度提供资源?使用dp单位来调整按钮的大小是不够的;您还必须提供多种尺寸的图像:

  • 分辨率:120dpi
  • mdpi:160dpi
  • 高清:240dpi
  • xhdpi: 320dpi

转换公式如下:

px = dp * (dpi / 160)

其中px是最终图像大小(以像素为单位),dp是与密度无关的所需大小,dpi是目标密度。

简化此公式,使用mdpi图像的像素大小作为基线:

ldpi = mdpi * 0.75
hdpi = mdpi * 1.5
xhdpi = mdpi * 2.0

回到您的示例代码,如果您想要一个 30dp x 30dp 的按钮,您应该为每个密度提供图像:

  • ldpi:23 像素 x 23 像素
  • mdpi:30 像素 x 30 像素
  • hdpi: 45 像素 x 45 像素
  • xhdpi: 60 像素 x 60 像素
于 2012-07-09T16:41:35.247 回答