Android将TextView文本大小设置为在所有屏幕尺寸上看起来相同

时间:2015-03-10 11:28:51

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

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

enter image description here

这是我的问题:我希望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那样小,但仍然如此。我也从其他问题尝试了大部分答案,但仍然没有奏效。 有什么想法吗?

2 个答案:

答案 0 :(得分:4)

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

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

    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手机之间存在细微差别,但在我的情况下这些都可以。

答案 1 :(得分:0)

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

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

希望这会对你有所帮助。