Android TextView TextSize适配问题

转至: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需要一个积分,上传时没注意,新手也不知道怎么修改,有需要的可以私我,我会尽量提供帮助。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值