【问题标题】:Android: Disabling Text Scaling (keeping sp the same as dp)?Android:禁用文本缩放(保持 sp 与 dp 相同)?
【发布时间】:2014-04-24 20:56:11
【问题描述】:

我正在开发一个(应该是)特定于设备的应用程序(理论上总是在 Nexus 7 上使用,尽管它可能是该设备的任一版本)。许多视图将包含文本和图形的某种组合,以有意义的方式定位。如果我按照推荐使用“sp”来定义文本大小,并且用户全局更改“文本大小”,则文本将被缩放但图形不会 - 完全破坏视觉呈现。

我想使用 dp 而不是硬像素单位,因为不同版本的 Nexus 7 具有不同的显示密度。如果有人改变主意并且应用程序在其他显示器上运行,如果保持位置关系也会很好。 dp 为图形处理此问题,但通过对文本使用不同的测量单位,它允许用户损坏整体演示文稿。

有没有办法禁用可选地应用于“sp”的缩放,以便图形(用 dp 定义)和文本(用 sp 定义)之间的关系不会被破坏?坦率地说,我只想用 dp 定义文本,但找不到使用代码的方法(似乎没有一个 TypedValue 常量支持它)。

谢谢!

【问题讨论】:

  • 您是在动态创建视图吗?我认为您可以在 xml 中使用 dp 作为文本大小,但这不是最佳做法。虽然不是 100%
  • 是的,视图是在代码中创建的,并且可以在执行期间更改。这就是为什么我包含有关 TypedValue 的评论,因为这就是您为 TextView.setTextSize() 指定单位的方式。
  • 我是根据这个推测的,但我不知道他们是否必须这样:)

标签: android text graphics scaling


【解决方案1】:

如果我按照推荐使用“sp”来定义文本大小,并且用户全局更改“文本大小”,则文本将被缩放但图形不会 - 完全破坏视觉呈现。

用户控制的字体缩放在桌面 GUI 中已经存在了很长时间,并且随着浏览器中用户控制的字体缩放在网页设计中脱颖而出。也许您可以考虑学习如何处理文本大小的变化,就像无数开发人员在您之前所做的那样。

坦率地说,我只想用 dp 定义文本,但找不到使用代码的方法(似乎没有任何 TypedValue 常量支持它)。

dp 也缩写为dip,代表与密度无关的像素。对应的TypedValue is COMPLEX_UNIT_DIP

【讨论】:

  • 是的,我知道它是如何用于网页等的。但这是一个集成的图形+文本环境。一个类比是汽车的仪表板显示器。您将如何“处理文本大小更改”?如果数字/字母改变大小会怎样?举个例子,考虑一下 speedo 或 tach 周围的数字是否增加了 3 倍;它们相对于仪表上刻度线的位置将失败。但是您可能希望使它们动态化以适应不同的测量单位和/或满量程范围。你不可能有罐头剪贴画来预测每一种可能性。
  • 关于 COMPLEX_UNIT_DIP 的提示非常有用,谢谢。我会调查的。
  • @AndroidNewbie:“他们相对于刻度线的位置会失败”——才华横溢的程序员将标签固定在刻度线上。
  • @AndroidNewbie:或者,不要为此使用单独的小部件,而是在画布上绘制图像和标签。在任何一种情况下,根据当前文本大小为标签选择位置都是非常可行的。毕竟,文本大小不仅仅是字体大小的函数,也是语言的函数。
  • "才华横溢的程序员将标签锚定到刻度线。"但如果一个是缩放而另一个不是,它们的视觉关系仍然会发生变化并破坏视觉呈现。
猜你喜欢
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
  • 2015-06-22
  • 2014-08-21
  • 1970-01-01
  • 1970-01-01
  • 2013-05-13
相关资源
最近更新 更多