【问题标题】:Android multiple screen size and avoid duplicating imagesAndroid多种屏幕尺寸,避免重复图像
【发布时间】:2012-12-03 19:49:50
【问题描述】:

我有一个应用程序在 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 个?

【问题讨论】:

  • 您有没有想过使用矢量而不是基于光栅的图像。如果您想在任何分辨率下保持一致的缩放比例,基于矢量的解决方案总是会提供比光栅更好的结果,请查看code.google.com/p/svg-android

标签: android resources screen resolution


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果您说的是最便宜的方法(不要在可绘制对象中添加多个图像),请使用 9-Patch 图片。如果您不了解它,请在此处查看并了解用法:

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

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

    【讨论】:

      【解决方案3】:

      从您的问题来看,平板电脑或手机不需要不同方向的图像。 如果您希望图像在两个设备上都采用 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>
      

      还可以考虑使用alias resources

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

      来自链接的 Google 文档:

      要为现有的可绘制对象创建别名,请使用元素。 例如:

      <?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/)。

      【讨论】:

        猜你喜欢
        • 2013-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多