1

我有一个应用程序在 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 文件而言)来做到这一点。

各种密度:仅限手机

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

各种密度:平板电脑

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

这导致需要 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?

4

3 回答 3

0

如果您正在谈论最便宜的方法(不在可绘制对象中添加多个图像),请使用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

于 2012-12-03T22:02:08.770 回答
0

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

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

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

您可以将 TextView 的背景设置为透明,并将其下方的 ImageView 包含在所需大小的 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>

还要考虑使用别名资源

这将允许您定义一个 xml 文件,该文件的行为就好像它是真正的 PNG 图像(并且在 R.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/drawable/ 中)。

于 2014-11-11T22:57:29.333 回答
0

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

于 2012-12-03T20:43:00.323 回答