【问题标题】:Scale font size based on screen density根据屏幕密度缩放字体大小
【发布时间】:2015-07-29 08:12:15
【问题描述】:

我知道在 Android 中,您可以根据屏幕密度缩放图像。 例如,如果 mdpi 是基线,

  • hdpi = 1.5 * mdpi
  • xhdpi = 2 * mdpi
  • xxhdpi = 3 * mdpi
  • xxxhdpi = 4 * mdpi。

字体大小是否有类似的值?

【问题讨论】:

  • 如果您使用“sp”,Android 中的字体大小会根据屏幕的密度和用户字体设置自动调整

标签: java android


【解决方案1】:

您需要做的是使用scaleDensityhere 文档)值执行转换,DisplayMetrics 的成员 班级。来自文档

显示器上显示的字体的比例因子。这是一样的 作为密度,除了它可以在较小的增量调整 运行时基于用户对字体大小的偏好。

【讨论】:

  • 所以基于这个值,字体大小必须以编程方式设置对吗?
  • 取决于用例。如果是 TextView,setTextSize 会为您进行转换。
  • 最后一个问题,如果我在 mdpi 中设置字体大小,是否需要为其他屏幕密度(hdpi、xhdpi 等)设置字体大小? Android 会根据屏幕密度自动缩放字体大小吗?
  • android 会处理它
【解决方案2】:

字体大小可能使用完全相同的值

android:textSize="18dp"

虽然建议使用sp(缩放独立像素)。它与dp 几乎相同,但它可能会根据用户可访问性设置进行放大(例如,如果您视力不佳,您可以放大影响sp 的计算方式的字体大小)。所以,最后变成了:

android:textSize="18sp"

再一次,如果您使用默认设置,1dp == 1sp

【讨论】:

    【解决方案3】:

    如果您想以编程方式进行:

    view.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize);
    

    【讨论】:

      【解决方案4】:
      1. 在您的 res 文件夹中创建这 5 个文件夹
        values-ldpi
        values-mdpi
        values-hdpi
        values-xhdpi
        values-xxhdpi

      2. 并在每个文件夹中添加dimens.xml
      3. 将此代码粘贴到每个dimens.xml 中

      <?xml version="1.0" encoding="utf-8"?>
      <resources>
          <dimen name="font_size">72sp</dimen>
      </resources>

      根据屏幕密度改变字体大小。

      【讨论】:

      • 这个答案不正确,我有两个不同的设备,它们是 xxhdpi,其中一个会炸毁字体
      猜你喜欢
      • 2020-04-25
      • 2023-03-22
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 2017-11-02
      相关资源
      最近更新 更多