【问题标题】:Android set TextView text size to look the same on all screen sizesAndroid 将 TextView 文本大小设置为在所有屏幕尺寸上看起来都相同
【发布时间】:2015-05-11 19:43:53
【问题描述】:

我有一个方形 LinearLayout,其中包含其他一些 LinearLayoutsImageViewsTextViews。在用户更改布局内容后,我将布局内容保存为 png 文件。所有图像和文本都使用一般重力和 layout_gravity 值进行排列。这是一个小样本:

这是我的问题:我希望 SAMPLE TEXT 在所有屏幕尺寸上看起来都完全相同,无论是 480p 的手机还是 1200p 的平板电脑。最初我认为在SP 中设置文本大小就足够了,但事实并非如此,因为随着屏幕分辨率变大,文本会变小。

所以我的问题是,我如何以编程方式设置文本大小,使其看起来完全一样大小,而与屏幕宽度无关。如您所见,父布局将始终是正方形。

我尝试以编程方式设置 SP 或使用比例因子。

float scale = 0;

if (screenWidth == 720) {
        scale = 1;
} else {
        scale = (720 - screenWidth) * 100.2f / screenWidth;
}

float defaultSizeFor720 = 35f;

textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, defaultSizeFor720 * scale);

它不起作用。随着屏幕变大,文本变小,不像单独使用 SP 时那么小,但仍然如此。我也尝试了其他问题的大部分答案,但仍然没有奏效。 有什么想法吗?

【问题讨论】:

  • 你试过用dp代替sp吗? sp 将根据屏幕尺寸和用户偏好进行缩放。
  • 如果sp 不起作用,那么您可以为不同的屏幕分别制作dimention

标签: android android-layout textview dpi text-size


【解决方案1】:

从您的 xml 文件中的 TextView 标记中删除文本大小属性并在代码中尝试此操作

float textSize = getResources().getDimension(R.dimen.textsize) / getResources().getDisplayMetrics().density;
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize);
textView.setText(" Your desired text ");

希望这会对你有所帮助。

【讨论】:

    【解决方案2】:

    我找到的唯一可靠的方法是:

    • 具有默认屏幕尺寸的文本高度
    • 根据当前屏幕尺寸缩放此文本高度
    • 找到适合所需高度的文本大小的最佳匹配

      float DEFAULT_SCREEN_WIDTH = 720f;
      
      float TEXT_HEIGHT = 50f;
      float sizeLine1 = (screenWidth * TEXT_HEIGHT) / DEFAULT_SCREEN_WIDTH;
      Rect bounds = new Rect();
      int textSize = 1;
      while (bounds.height() < sizeLine1) {
          textSize++;
          txtLine1.getPaint().setTextSize(textSize);
          txtLine1.getPaint().getTextBounds("test", 0, "test".length(), bounds);
      }
      

    可能不是优雅或高效,但它是可以接受的,并且确实有效。平板电脑 1200p 和 480p 手机之间存在细微差别,但在我的情况下这些都可以。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多