Android多屏尺寸,避免重复图像

时间:2012-12-03 19:49:50

标签: android resources screen resolution

我有一个应用程序在TextView中将位图显示为“drawableTop”:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="fill_parent"
    android:layout_weight="1"
    android:drawableTop="@drawable/bitmap"
    android:gravity="center"
    android:text="@string/text" />

位图来自res / drawable文件夹中的PNG文件,我们称之为bitmap.png。

我需要支持多种屏幕尺寸和密度,并希望找到最便宜的方式(根据我需要在res / *文件夹中包含多少PNG文件)。

各种密度:仅限手机

我得出的结论是,在res / drawable-xhdpi文件夹中使用bitmap.png已经足够了。当在高密度手机上显示时,它将按原样显示,而在手机上将降低密度,它将自动缩小。 换句话说,不需要在res / drawable-hdpi,res / drawable-mdpi等中使用bitmap.png的低分辨率版本。 基本上只有一个版本的PNG文件就足够了所有手机。

各种密度:平板电脑

现在,如果我想支持平板电脑,那就会出现问题:大屏幕和xlarge屏幕。 在平板电脑上,我希望图标的宽高比与手机上的宽高比相同:如果位图占据手机屏幕的1/4,我希望它占据平板电脑屏幕的1/4。我不能像以前那样重复使用相同的PNG文件,或者看起来太小,因为平板电脑只有更多的像素...所以对于平板电脑我需要更高的分辨率PNG。这适用于大屏幕和xlarge屏幕。

这导致需要3个文件夹和3个版本的PNG:

1:res / drawable-xhdpi / bitmap.png
2:res / drawable-large-xhdpi / bitmap.png
3:res / drawable-xlarge-xhdpi / bitmap.png

但是1和2基本上是3的低分辨率版本。

那么有一个简单的方法可以让一个文件夹不是3吗?

3 个答案:

答案 0 :(得分:0)

如果你想为所有分辨率只保留一个图像,为什么不保留res / drawable和res / drawable-land文件夹?

答案 1 :(得分:0)

如果您正在谈论最便宜的方式(不在drawable中添加多个图像),请使用 9-Patch Images 。如果你不知道它,那么看看我在这里学习用法:

http://www.androiddom.com/2011/05/android-9-patch-image-tutorial.html

http://www.androiddom.com/2011/05/creating-custom-drawn-button.html

答案 2 :(得分:0)

从您的问题来看,您不需要针对平板电脑或手机使用不同的定向图像。 如果您希望图像在两个设备上都采用1/4大小,则使用d(i)p在xml中定义图像。这将在所有设备上将图像缩放到相同的大小。

d(i)p相对于640x480(或纵向方向的480x640分辨率)进行缩放。 因此,您可以计算出不同的分辨率组合,以覆盖1/4的屏幕空间,例如320x240或240x320

如果您想控制图像的缩放,我建议将图像放在ImageView中。这将允许您使用 android:scaleType 属性来缩放图像的方式。

您可以将TextView的背景设置为透明,并将其下方的Im​​ageView包含在所需大小的relativeLayout中,以达到与当前相同的效果,如下所示:

<RelativeLayout
    android:layout_width="320dp"
    android:layout_height="240dp" 
    >

    <!-- Images at the top of the xml are drawn on the bottom! -->

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="fitCenter"
        android:src="@drawable/bitmap" 
        />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="@string/text"
        />


</RelativeLayout>

另请考虑使用alias resources

这将允许您定义一个xml文件,该文件就像它是真正的PNG图像一样(并且在R.drawable中被引用,但实际上是对另一个图像的引用。

来自关联的Google文档:

  

要为现有drawable创建别名,请使用该元素。   例如:

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

如果将此文件另存为icon.xml(在备用资源中)   目录,如res / drawable-en-rCA /),它被编译成一个   您可以引用为R.drawable.icon的资源,但实际上是一个   R.drawable.icon_ca资源的别名(保存在   RES /抽拉/).