文件名中有空格的Drawables?

时间:2014-01-23 10:51:45

标签: android image drawable

我是开发人员的应用程序,其中包含更多图像(约3000个),文件名中包含空格,如:

我是一个image.jpg

对Android不熟悉,我现在才发现,名字中有空格或大写字母的资源不接受这个,这是一个非常大的问题!

我在iOS应用程序中使用相同的图像(没有问题),现在几乎不可能更改所有名称。

有一种方法可以在不重命名图像的情况下解决这个问题吗?

如果没有,有没有办法快速重命名3000张图片?

非常感谢

2 个答案:

答案 0 :(得分:4)

  

有一种方法可以在不重命名图像的情况下解决这个问题吗?

不。 Res文件不能包含空格。

答案 1 :(得分:0)

您可以将它们放在assets文件夹中并在那里使用它们,但是您必须将每个图像作为位图,而不必使用R.drawable.image_name表示法。

我使用这种方法:

public static Bitmap getFoodImage(Context context, String foodType){
    InputStream bitmap = null;
    Bitmap bit = null;
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inSampleSize = 2;
    try {
        bitmap = context.getAssets().open(foodType.toUpperCase() + ".png");
        if(bitmap != null){

            DisplayMetrics metrics = context.getResources().getDisplayMetrics();
            int sWidth = metrics.widthPixels;

            options.inJustDecodeBounds = true;
            Bitmap dBit = BitmapFactory.decodeStream(bitmap, null, options);
            int intrinsicHeight = options.outHeight;
            int intrinsicWidth = options.outWidth;
            //int height = (int) (intrinsicWidth * proportion);
            int nHeight = (int) (intrinsicHeight/1.3);

            try {
                bitmap.reset();
            } catch (IOException e) {
                Log.e("SGNAM", e.getMessage());
            }

            options.inJustDecodeBounds = false;

            dBit = BitmapFactory.decodeStream(bitmap, null, options);

            Bitmap bP = Bitmap.createBitmap(dBit, 0, 0, intrinsicWidth, nHeight);

            if(sWidth < intrinsicWidth){
                bit = Bitmap.createScaledBitmap(bP, intrinsicWidth, intrinsicHeight, false);
            }
            else{
                bit = Bitmap.createScaledBitmap(bP, sWidth, intrinsicHeight, false);
            }
            bitmap.close();
            dBit = null;
            bP = null;
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

    return bit;
}

正如您所看到的,我的所有图像名称都是大写的,但如果不需要,您可以跳过该部分(对于png也是如此)。

如果您使用的是onCreate方法,并且所需的图像称为An image.png(请记住,在此示例中,方法添加了.png):

Context context = this;
Bitmap myBitmap = getFoodImage(context, An image);

您可以通过以下方式将此位图设置为imageView的资源:

ImageView myImageView = findViewById(R.id.imageView);
myImageView.setImageBitmap(myBitmap);

这应该是他的伎俩。