2012-12-03 23 views
1

我有一个显示在TextView中的位图作为“drawableTop”的应用程序:Android的多屏幕尺寸和避免重复图像

<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 /可绘制文件夹中的PNG文件,让我们称之为bitmap.png。

我需要支持多种屏幕尺寸和密度,并且想要找到最便宜的方法(根据我需要在res/*文件夹中有多少个PNG文件)来执行此操作。

各种密度:手机只

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

各种密度:平板电脑和

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

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

1:RES /绘制-xhdpi/bitmap.png
2:RES /提拉 - 大xhdpi/bitmap.png
3:RES /提拉 - XLARGE-xhdpi/bitmap.png

但1和2的3

基本上降低水库版本那么有没有一种简单的方法有一个文件夹不是3?

+0

你有没有想过使用矢量而不是基于栅格的图像。如果您想要在任何分辨率下进行一致的缩放,基于矢量的解决方案总是会提供比栅格更好的结果,请参阅https://code.google.com/p/svg-android/ – javram

回答

0

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

0

从你的问题来看,你不需要为平板电脑或手机不同朝向的图像。 如果您希望图像在两台设备上都采用1/4尺寸,则使用d(i)p在xml中定义图像。这将在所有设备上将图像缩放到相同尺寸。 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。引用,但实际上是另一幅图像的参考。

从链接谷歌文档:

创建别名到现有的绘制,使用元素 例如:

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

如果这个文件保存为icon.xml(在n替代资源 目录,例如res/drawable-en-rCA /),它被编译为 资源,您可以引用为R.drawable.icon,但实际上是R.drawable.icon_ca资源的 别名(保存在 res/drawable /中)。