在Android上重复使用不同屏幕大小和密度的可绘制图像
上下文:在Android上重复使用不同屏幕大小和密度的可绘制图像,android,alias,android-drawable,android-bitmap,xml-drawable,Android,Alias,Android Drawable,Android Bitmap,Xml Drawable,上下文: 我正在为平板电脑(景观)开发一个Android应用程序,图像资源的分辨率为1920x1200。该分辨率适用于以下屏幕尺寸和密度: drawable-xlarge-hdpi drawable-large-xhdpi 问题: 如果我在这两个文件夹中包含所有复制的图像资源,APK的最终大小将不必要地过大 我失败的方法: 我尝试使用Alias作为此处定义的绘图工具: 我的图像资源位于: res/drawable-nodpi/image_cmn.png 以及相应屏幕大小和密度文件夹中的两个
我正在为平板电脑(景观)开发一个Android应用程序,图像资源的分辨率为1920x1200。该分辨率适用于以下屏幕尺寸和密度:
drawable-xlarge-hdpi
drawable-large-xhdpi
问题:
如果我在这两个文件夹中包含所有复制的图像资源,APK的最终大小将不必要地过大
我失败的方法:
我尝试使用Alias作为此处定义的绘图工具:
我的图像资源位于:
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大型xhdpi,并且apk大小会增加
有人知道如何做到这一点吗?如果您想在所有尺寸的设备上使用相同的图像,那么我认为您必须使用9-Patch图像。 这里是Android的官方文章 之前: 之后: 请参阅:
希望有帮助。我尽量避免在ImageView上使用wrap_内容,因为不同的平台版本会以不同的方式调整图像的大小,如果在dp中设置明确的宽度和高度,则选择哪幅图像并不重要 在您的情况下,我将使用drawable/xhdpi中的单个图像。在dp中的布局文件中指定其宽度和高度。对于一个1920x1200px的图像,它将是layout\u width=“960dp”layout\u height=“600dp” 在x-large平板电脑上,图像的物理尺寸与大型平板电脑大致相同 如果您希望x-large平板电脑上的图像更大,请包含第二个布局文件,其中图像的宽度和高度会增加,但保持相同的图像 或者,您可以使用不同于大型和x大型的维度资源。这样如何:
res/drawable nodpi
res/layout xlarge
,res/layout large
,res/layout
ImageView
上使用此图像时,不要使用match\u parent
或wrap\u content
,而是使用dp中的计算大小这应该是可行的,但是,缺点是它不使用,这意味着在dpi较低的设备上,它会消耗更多内存。如果你想在所有尺寸的设备上使用相同的图像,那么我认为你应该在android的线性布局中使用9个补丁图像,每个布局包含权重标签。我认为这是100%的工作。我敢肯定。因为我将这种方法用于通用应用(意味着平板电脑和设备应用)好的,我明白你的问题。我保证与这个问题相关 有两种方法,我都推荐 第一种方式(与您当前的问题相关更方便。) 如果大小变大,则上载多个apk 跟着 第二种方式我更喜欢用这种方式 创建多个布局。如下 res/布局/main_activity.xml--->#适用于手机(小于600dp的可用宽度) res/layout-sw600dp/main_activity.xml-->#适用于7英寸平板电脑(600dp宽和更大) res/布局-sw720dp/main_activity.xml#适用于10英寸平板电脑(720dp宽且更大) 我强烈建议你读每一个单词
谢谢。我可以为这个问题提出两种解决方案: 第一个:
ImageView
只需使用压缩工具压缩png图像。它可以在不降低质量的情况下(对于移动设备)最多减少70-80%的图像。通常,我们仅对可绘制资源使用密度限定符。您真的不需要添加large/xlarge,因为这两个工具只处理布局资源。(顺便说一句,我从来没有看到它们一起使用过)@sutianshi:不,根据屏幕大小使用不同的绘图工具也是合理的。例如,谷歌是在平台上实现这一点的,其资源目录类似于
res/drawable-sw600dp-hdpi/
“分辨率适合以下屏幕大小和密度”——1920x1200与屏幕大小几乎没有关系。例如,我希望在今年晚些时候看到-正常的
设备运行这种分辨率(或更高的分辨率)。@commonware我同意,手机也可以有这种分辨率。在这种情况下,我只需要开发平板电脑,所以这些是我需要的文件夹我有完全相同的问题,图像太大时,使用别名,这种方法基本上是无用的绘图。。。谷歌怎么能将这种东西发布到生产中呢?对于可以拉伸到具体像素的简单图像来说,这是一个很好的解决方案,但对于完整图像(如照片)来说,这恐怕是唯一的解决方案。我一点也不高兴(关于这个android问题),因为这种方法会增加低分辨率设备上的内存消耗。你可以将我的方法与你的方法结合起来,使用xml别名来选择你想要的图像,然后在布局中使用显式的dp大小来控制可视化运行时的大小调整。T