Android 将 TextView 文本大小设置为在所有屏幕尺寸上看起来都一样
Android set TextView text size to look the same on all screen sizes
我有一个正方形 LinearLayout,其中包含一些其他 LinearLayouts
,里面有 ImageViews
和 TextViews
。用户更改布局内容后,我将其保存为 png 文件。所有图像和文本都使用一般重力和 layout_gravity 值进行排列。这是一个小样本:
这是我的问题:我希望示例文本在所有屏幕尺寸上看起来完全相同,即 phone 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 时那么小,但仍然如此。我也尝试了其他问题的大部分答案,但仍然没有用。
有什么想法吗?
从您的 xml 文件中的 TextView 标记中删除文本大小属性并在代码中尝试此操作
float textSize = getResources().getDimension(R.dimen.textsize) / getResources().getDisplayMetrics().density;
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize);
textView.setText(" Your desired text ");
希望对您有所帮助。
我找到的唯一可靠的方法是:
- 具有默认屏幕尺寸的文本高度
- 根据当前屏幕尺寸缩放此文本高度
找到文本大小的最佳匹配以适应所需的高度
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 手机之间存在细微差别,但就我而言这些都还可以。
我有一个正方形 LinearLayout,其中包含一些其他 LinearLayouts
,里面有 ImageViews
和 TextViews
。用户更改布局内容后,我将其保存为 png 文件。所有图像和文本都使用一般重力和 layout_gravity 值进行排列。这是一个小样本:
这是我的问题:我希望示例文本在所有屏幕尺寸上看起来完全相同,即 phone 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 时那么小,但仍然如此。我也尝试了其他问题的大部分答案,但仍然没有用。 有什么想法吗?
从您的 xml 文件中的 TextView 标记中删除文本大小属性并在代码中尝试此操作
float textSize = getResources().getDimension(R.dimen.textsize) / getResources().getDisplayMetrics().density;
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, textSize);
textView.setText(" Your desired text ");
希望对您有所帮助。
我找到的唯一可靠的方法是:
- 具有默认屏幕尺寸的文本高度
- 根据当前屏幕尺寸缩放此文本高度
找到文本大小的最佳匹配以适应所需的高度
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 手机之间存在细微差别,但就我而言这些都还可以。