Android与多个设备的兼容性

时间:2014-06-16 18:23:20

标签: java android xml

好的,所以我知道如果我想制作图像,文字和按钮不会在小型设备中过于挤压而在巨型平板电脑中不会非常小,我可以为每个设备和每个方向创建不同的资源文件。

有更简洁的方法吗?即有没有办法让我的所有资源的单个文件夹乘以“屏幕缩放系数”,这样每次我想编辑我不必返回并更改30种不同的资源,然后检查以确保它们一切都合适吗?

由于

2 个答案:

答案 0 :(得分:2)

您不必为每个小部件创建不同的大小。

对于ButtonTextViewImageView(以及任何其他Views),您可以在android:layout_width和android:layout_height属性> dp (与密度无关的像素)。

这个单位 - 我们可以从它的名字猜测 - 独立于屏幕的密度。这意味着每个屏幕上的结果都是相同的。

您可能必须以多种尺寸创建的唯一内容是图标。为此,您必须遵循Android提供的有关不同密度之间比率的规则。有关详细信息,请查看this

您还可以在XML文件中创建图标。这样,它将自动适合每个屏幕。问题是,创建复杂的图标非常困难。

答案 1 :(得分:0)

实际上,它为每个设备提供多个图像效率,与低端设备加载500px的效果不同,而不是加载实际需要的100px。所以我建议在ImageView中使用scaleType并使用android_layout_widthandroid:layout_height示例中的尺寸调整您的用户界面: android:layout_width="@dimen/size"您可以根据自己的设备使用不同的尺寸。 另一种方法是将图像放在drawable-nodpi下并在运行时缩放,这样就可以随时修复图像

public static int calculateInSampleSize(
            BitmapFactory.Options options, int reqWidth, int reqHeight) {
    // Raw height and width of image
    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1;

    if (height > reqHeight || width > reqWidth) {

        final int halfHeight = height / 2;
        final int halfWidth = width / 2;

        // Calculate the largest inSampleSize value that is a power of 2 and keeps both
        // height and width larger than the requested height and width.
        while ((halfHeight / inSampleSize) > reqHeight
                && (halfWidth / inSampleSize) > reqWidth) {
            inSampleSize *= 2;
        }
    }

    return inSampleSize;
}

你可以在android开发者指南中查看有效扩展位图的进一步帮助 http://developer.android.com/training/displaying-bitmaps/load-bitmap.html