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

11 篇文章 0 订阅
11 篇文章 0 订阅

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


        

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

   这些值都是通过读取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到手机,一切正常。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值