在Android上重复使用不同屏幕尺寸和密度的可绘制图像

时间:2014-08-09 15:34:03

标签: android alias android-drawable android-bitmap xml-drawable

上下文 我正在为平板电脑(风景)开发一个Android应用程序,其图像资源的分辨率为1920x1200。该分辨率适合以下屏幕尺寸和密度:

drawable-xlarge-hdpi
drawable-large-xhdpi

问题: 如果我在这两个文件夹中包含所有重复的图像资源,则APK的最终大小将不必要地重

我不成功的方法: 我试图在这里定义的drawables中使用Alias: http://developer.android.com/guide/topics/resources/providing-resources.html#AliasResources

我有我的图像资源:

res/drawable-nodpi/image_cmn.png

和相应屏幕尺寸和密度文件夹中的两个别名:

res/drawable-xlarge-hdpi/image.xml
res/drawable-large-xhdpi/image.xml

image.xml:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/image_cmn" />

当然,当我在布局文件中使用我的图像时,我会引用别名:

<ImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:src="@drawable/image" />

但遗憾的是Android没有正确调整我的测试平板电脑(mdpi)的资源,结果是我有更大的图像。

我尝试将原始png移动到 res / drawable 甚至 res / raw ,但结果与 res / drawable-nodpi

如果我将此png移动到 res / drawable-xlarge-hdpi (与xml别名相同),结果是正确的但自然不能解决我的问题因为我也必须将它们复制到 res / drawable-large-xhdpi 和apk尺寸增加。

有谁知道如何实现这一目标?

6 个答案:

答案 0 :(得分:3)

我尽量避免在ImageViews上使用wrap_content,因为不同的平台版本会不同地调整图像大小,如果在dp中放置一个明确的宽度和高度,那么选择哪个图像并不重要。

在你的情况下,我会在drawable / xhdpi中有一个图像。在dp中的布局文件中指定它的宽度和高度。对于1920x1200px的图像,即layout_width =“960dp”layout_height =“600dp”

图像与x大型平板电脑的大小平板电脑的物理尺寸大致相同。

如果您希望图像在x-large平板电脑上更大,请添加第二个布局文件,其中图像的宽度和高度会增加但保持相同的图像。

或者,您可以使用大型和x大型之间不同的维度资源。

答案 1 :(得分:3)

我可以针对这个问题提出两种解决方案:

第一个:

  1. 将所有图片放入资源文件夹。按分辨率将它们拆分为文件夹。
  2. 编写您自己的逻辑以确定当前的设备分辨率和/或大小。
  3. 从具有确定分辨率的文件夹中选择图像。
  4. 在代码中将其设置为ImageView
  5. 第二个(它很难看,但非常快):

    只需使用tinypng.com压缩您的png图像。它可以将图像重新调整到70-80%而不会降低质量(适用于移动设备)。

答案 2 :(得分:2)

怎么样:

  1. 将所有图片资源放入res/drawable-nodpi
  2. res/layout-xlargeres/layout-largeres/layout
  3. 中添加了不同的布局文件
  4. ImageView上使用此图片时,请勿使用match_parentwrap_content,而是使用dp中的计算尺寸。
  5. 这应该可行,但是,缺点是它不使用pre-scaling,这意味着在较低的dpi设备上,它将消耗更多的内存。

答案 3 :(得分:1)

如果你想为所有尺寸的设备使用相同的图像,那么我认为你必须使用 9-Patch Images。

Android官方文章click here.

<强>之前:

enter image description here

<强>后:

enter image description here

请参阅: Android 9 Patch Image Tutorial

希望它有所帮助。

答案 4 :(得分:1)

如果你想为所有尺寸的设备使用相同的图像,那么我认为你应该使用9补丁图片,每个布局包含在android中的线性布局内的重量标签。我认为它的工作是100%的。我确定。因为我使用这种方法进行普遍应用(意味着平板电脑和设备应用程序)

答案 5 :(得分:1)

好的,我得到了你的问题。我的话与此问题相关

有两种方式,我推荐两种方式。

第一种方式(与您当前的问题相关更方便。)

如果尺寸变大,则上传多个apk。

关注official guide

第二种方式我更喜欢这种方式。

创建多个布局。如下所示

res / 布局 /main_activity.xml ---&gt; #对于手机(小于600dp可用宽度)

res / layout-sw600dp /main_activity.xml - &gt;#适用于 7“平板电脑(600dp广泛且更大)

res / layout-sw720dp /main_activity.xml#适用于 10“平板电脑(720dp广泛且更大)

我强烈建议阅读this official doc by google的每个单词。

感谢。