11

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

drawable-xlarge-hdpi
drawable-large-xhdpi

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

我不成功的方法: 我尝试使用 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

图像.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 大小增加。

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

4

6 回答 6

3

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

在您的情况下,我将在 drawable/xhdpi 中有一个图像。在 dp 的布局文件中指定它的宽度和高度。对于 1920x1200 像素的图像,layout_width="960dp" layout_height="600dp"

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

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

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

于 2014-08-13T03:52:31.967 回答
3

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

第一:

  1. 将所有图像放入资产文件夹。按分辨率将它们拆分到文件夹中。
  2. 编写您自己的逻辑来确定当前的设备分辨率和/或大小。
  3. 从具有确定分辨率的文件夹中选择图像。
  4. 将其设置为您ImageView的代码。

第二个(它很丑,但很快):

只需使用tinypng.com压缩您的 png 图像。它可以将您的图像减少多达 70-80%,而不会降低质量(对于移动设备)。

于 2014-08-19T15:19:42.940 回答
2

这个怎么样:

  1. 把你所有的图片资源放进去res/drawable-nodpi
  2. 将不同的布局文件放入res/layout-xlarge, res/layout-large,res/layout
  3. 在 上使用此图像时ImageView,不要使用match_parentor wrap_content,而是使用 dp 中的计算大小。

这应该可以,但是缺点是它不使用预缩放,这意味着在较低 dpi 的设备上,它会消耗更多的内存。

于 2014-08-13T03:55:24.057 回答
2

好的,我有你的问题。我有我的话与这个问题有关

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

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

如果大小变大,请上传多个 apk。

遵循官方指南

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

创建多个布局。像下面

res/ layout /main_activity.xml ---> # 用于手机(小于 600dp 可用宽度)

res/ layout-sw600dp /main_activity.xml --># 适用于7” 平板电脑(600dp 宽和更大)

res/ layout-sw720dp /main_activity.xml # 适用于10” 平板电脑(720dp 宽和更大)

我强烈建议通过 google 阅读这个官方文档的每一个字。

谢谢。

于 2014-08-19T14:15:22.040 回答
1

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

这里Android官方文章点击这里。

前:

在此处输入图像描述

后:

在此处输入图像描述

请参考:Android 9 补丁图像教程

希望能帮助到你。

于 2014-08-13T03:04:51.297 回答
1

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

于 2014-08-18T04:11:05.503 回答