天天看点

android TextView空间的setTextSize()方法在真机上运行大小问题

今天调试一个项目,点击控件,放大或缩小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需要一个积分,上传时没注意,新手也不知道怎么修改,有需要的可以私我,我会尽量提供帮助。