[置顶] 关于“选择特大字体,图库详情中部分信息行间距太大”的问题

     android4.4中,将字体设置为超大字体后,图库详情中某些项格式不正确。如下图


        [置顶] 关于“选择特大字体,图库详情中部分信息行间距太大”的问题_第1张图片

   为什么小字体没问题,大字体有问题呢?

   这些值都是通过读取exif信息得到的,那就只有一种可能,制造商和模型的制造商两项的exif信息有问题。

通过看hal层代码camera_exif.h发现一段代码:

char exif_str_maker[128]="K-TOUCH";
char exif_str_model[128]="K-Touch Kis 7";
exif_str_maker[127]=0;
exif_str_model[127]=0;

static customExifInfo_t exifTag={0};
memcpy(exifTag.strMake,exif_str_maker,31);
memcpy(exifTag.strModel,exif_str_model,31);
strcpy((char *)exifTag.strSoftware,"custom software");

其中memcpy的时候第三个参数为31,引入了过多的空格。第一反应是改为strlen(exif_str_maker)+1,但是可能涉及很多问题。

为何不把问题想简单点,从gallery获取exif值时将过多空格去掉,

所以最终的解法是在gallery的MediaDetails.java中将setexifdata()修改为:

    private static void setExifData(MediaDetails details, ExifTag tag,
            int key) {
        if (tag != null) {
            String value = null;
            int type = tag.getDataType();
            if (type == ExifTag.TYPE_UNSIGNED_RATIONAL || type == ExifTag.TYPE_RATIONAL) {
                value = String.valueOf(tag.getValueAsRational(0).toDouble());
            } else if (type == ExifTag.TYPE_ASCII) {
                value = tag.getValueAsString();
            } else {
                value = String.valueOf(tag.forceGetValueAsLong(0));
            }
            if (key == MediaDetails.INDEX_FLASH) {
                MediaDetails.FlashState state = new MediaDetails.FlashState(
                        Integer.valueOf(value.toString()));
                details.addDetail(key, state);
            } else {
            	//modify start
            	//details.addDetail(key, value);
            	if (key == MediaDetails.INDEX_MODEL || key == MediaDetails.INDEX_MAKE){
            		details.addDetail(key, value.trim());
            	} else {
            		details.addDetail(key, value);
            	}
            	//modify end
            }
        }
    }

在将新编出的Gallery程序push到手机,一切正常。



你可能感兴趣的:([置顶] 关于“选择特大字体,图库详情中部分信息行间距太大”的问题)