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

更多相关文章

  1. android的一些异常
  2. Android(安卓)应用性能优化
  3. Android开发环境的配置与源代码的导入
  4. 提高代码质量-工具篇
  5. android 4.4 以上沉浸式状态栏和沉浸式导航栏管理,一句代码轻松实
  6. Android动态调试--jeb调试apk
  7. Android实现高斯模糊(也叫毛玻璃效果)
  8. 常见android中的style
  9. !!!Android开发、测试持续集成环境Jenkins搭建

随机推荐

  1. android中dialog加工后的例子
  2. Android 系统编译移除应用
  3. [Android实例] Android实现开机自动运行
  4. Android支持的图片格式
  5. Android 高级混淆和代码保护技术
  6. android开发之启动模拟器并安装游戏apk
  7. Handler发送消息的方式
  8. Android 高德地图自定义定位图标的显示
  9. 一个高效、稳定、强大的Android刷新库
  10. Android 4.0源码编译不生成odex