【问题标题】:Increasing TextView TextSize by 10% dynamically动态增加 TextView TextSize 10%
【发布时间】:2012-11-09 17:38:11
【问题描述】:

有人会认为这会使文本大小增加 10%:

view.setTextSize( (float) (view.getTextSize() * 1.1) );

但不幸的是,getset 调用以不同的规模运行!


在 Galaxy Nexus(手机)上检查一下:

float a = view.getTextSize();  // a = 44.0
view.setTextSize(a);
float b = view.getTextSize();  // b = 88.0

在 Nexus7(平板电脑)上:

float a = view.getTextSize();  // a = 44.0
view.setTextSize(a);
float b = view.getTextSize();  // b = 58.6


set 调用将我给它的数字缩放为任意数字。

我尝试调用 getScaleX()getTextScaleX() 来查看是否可以检索比例值并解释它,但是这两个调用总是返回 1.0

【问题讨论】:

    标签: android textview scale


    【解决方案1】:

    这两种方法使用不同的单位。 getTextSize() 返回的值是实际测量的像素,而setTextSize() 采用 SP 中的参数,然后针对设备进行适当的测量。你需要使用view.setTextSize(TypedValue.COMPLEX_UNIT_PX, a) 来做你正在寻找的东西。 documentation 有更多信息和其他单位值。

    【讨论】:

      【解决方案2】:

      您是绝对正确的,这是设计使然。让我解释一下:

      当您使用单个参数将值传递给setTextSize() 方法时,它假定该值使用“sp”的单位,类似于“dp”。两者都取值并应用适合设备分辨率的比例因子(mdpi 为 1.0,hdpi 为 1.5,xhdpi 为 2.0)。

      来自 TextView 文档:

      将默认文本大小设置为给定值,解释为“缩放像素”单位。此大小根据当前密度和用户字体大小偏好进行调整。

      当您取回该值时,它始终以原始像素值存储。如果您还想以原始像素为单位设置文本大小,则应使用带有两个参数的setTextSize() 版本,以便您可以指定单位常量。

      Galaxy Nexus 是 xhdpi 设备(因此所有比例因子均为 2.0),Nexus 7 是 tvdpi 设备,比例因子为 1.333333。也许this guide 会帮助解释更多。

      【讨论】:

      • 嗯,好的。这更详细地解释了这种行为。谢谢
      猜你喜欢
      • 1970-01-01
      • 2013-02-26
      • 2018-06-08
      • 1970-01-01
      • 2016-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-05
      相关资源
      最近更新 更多