繁体   English   中英

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

[英]Reuse drawable images for different screen sizes and densities on Android

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

drawable-xlarge-hdpi
drawable-large-xhdpi

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

我的方法不成功:我尝试使用Alias来实现此处定义的drawable: 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大小增加。

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

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

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

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

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

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

我可以为这个问题提出两个解决方案:

第一:

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

第二个(它很难看,但非常快):

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

这个怎么样:

  1. 将所有图像资源放在res/drawable-nodpi
  2. 将不同的布局文件放在res/layout-xlargeres/layout-largeres/layout
  3. ImageView上使用此图像时,请勿使用match_parentwrap_content ,而是使用dp中的计算大小。

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

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

Android官方文章点击此处。

之前:

在此输入图像描述

后:

在此输入图像描述

请参阅: Android 9 Patch Image Tutorial

希望能帮助到你。

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

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

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

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

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

按照官方指南

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

创建多个布局。 如下

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

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

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

我强烈建议谷歌阅读这篇官方文档的每个单词。

谢谢。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM