转至:http://blog.youkuaiyun.com/msl0903/article/details/7887382
版权声明:本文为博主原创文章,未经博主允许不得转载。
今天调试一个项目,点击控件,放大或缩小TextView中的文本字体大小
它在虚拟机上能正常运行,但在真机上出现错误
给段代码:
viewText.setTextSize(viewText.getTextSize()-5);
System.out.println("viewTitle.getTextSize="+viewTitle.getTextSize());
每次点击,都会运行这段代码
但根据我打印的日志信息发现,结果是递增的
于是我想到真机上运行setTextSize()方法并不是我们想象的那样,里面设置多少,它字体就是多少
新建了一个android项目,加入代码(例子很简单,只附上关键性代码)
tx.setTextSize(50.0f);
for(int i=0;i<5;i++){
System.out.println("tx.getTextSize()="+tx.getTextSize());
tx.setTextSize(tx.getTextSize()-5);
}
根据打印日志,输出结果还是递增的,我排除了原项目中代码错误问题,专心研究这setTextSize
我每次增大减少的数,也许是运气问题,当tx.setTextSize(tx.getTextSize()-25);时,输出结果没变动,不减少也不增加
我大胆猜想:只有减的值是当前值的一半以上时,字体才会变小
为验证猜想,重设代码:
tx.setTextSize(70.0f);
for(int i=0;i<5;i++){
System.out.println("tx.getTextSize()="+tx.getTextSize());
tx.setTextSize(tx.getTextSize()-25);
}
结果值还是在增加,将25改成35,值不变,大于35字体开始变小
此刻,我想我发现了什么........
附demo下载:点击下载
于是去看了下setTextSize的源码,问题马上就解决了,源码就不讲解了,很简单的几句代码。
先上一小段代码:
DisplayMetrics dm = getResources().getDisplayMetrics();
float value = value = dm.scaledDensity;
先得到手机的scaledDecsity
设置字体大小时,如设置18
用setTextSize(18/value)
那么我们得到的getTextSize()为18
ps:我只在我的真机上和2.3的模拟器上运行过,若有问题,欢迎提出!下载demo需要一个积分,上传时没注意,新手也不知道怎么修改,有需要的可以私我,我会尽量提供帮助。