如何为不同的屏幕动态设置文本视图的文本大小

我正在创建一个文本视图,并动态添加到布局。我使用 textView.setTextSize(18)方法来设置文本大小。我在三星平板电脑上测试了一下,发现这个屏幕的字体大小太小了,于是我把文本大小改为25,但是对于模拟器(480 * 800)来说太大了。我的问题是动态设置文本大小,以便它适合所有屏幕。

259273 次浏览

您应该使用资源文件夹,如

values-ldpi
values-mdpi
values-hdpi

然后将每个范围的文本大小写入到‘ vicsions.xml’文件中。

在 Java 代码中,您可以设置文本大小

textView.setTextSize(getResources().getDimension(R.dimen.textsize));

Xml 示例维度

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

我认为您应该使用 textView.setTextSize (float size)方法来设置文本的大小。SetText (arg)用于设置文本视图中的文本。

编辑: 当我在 StackOverflow 上搜索时,我发现了 本问题重复: 这个和 < a href = “ https://StackOverflow. com/questions/5032355/android-textview-setextsize-inwrong- 增加-text-size”> < strong > This

您需要使用另一个函数 setTextSize(unit, size)和单元 SP像这样,

tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18f);

请阅读更多关于 一个 href = “ http://developer.android.com/reference/android/util/TypedValue.html”rel = “ noReferrer”> TypedValue 常数的内容。

在 Style.xml 中预定义样式:

<style name="largeText">
<item name="android:textAppearance">@android:style/TextAppearance.Large.Inverse</item>
<item name="android:textStyle">bold</item>
</style>

密码:

text.setTextAppearance(context, R.style.largeText);

在这种情况下,可能不需要使用 ldpimdpihdpi限定符。

在资源文件中定义维度时,应包括度量单位。如果你使用 sp 单位,它们是根据屏幕密度缩放的,所以15 sp 的文本应该在不同密度的屏幕上显示大致相同的尺寸。< br > (设备的真实屏幕密度不会完全匹配,因为 Android 将屏幕密度分为 120, 160, 240, 320, 480 and 640 dpi组。)

当调用 getResources().getDimension(R.dimen.textsize)时,它将返回以像素为单位的大小。如果使用 sp,它将按屏幕密度缩放,

调用 setText(float)设置 sp units中的大小。这就是问题所在,< br > 也就是说一方面需要像素测量,另一方面需要 sp unit来解决这个问题:

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
getResources().getDimension(R.dimen.textsize));

注意,您还可以使用

getResources().getDimensionPixelSize(R.dimen.textSize);

而不是 getDimension(),它将四舍五入并转换为一个非小数值。

经过长时间的纠缠,这个问题终于解决了

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
getResources().getDimension(R.dimen.textsize));

创建这样的 res/values/dimens.xml文件夹

<?xml version="1.0" encoding="utf-8"?>
<resources>


<dimen name="textsize">8sp</dimen>


</resources>
float currentSize = textEdit.getTextSize(); // default size
float newSize = currentSize * 2.0F; // new size is twice bigger than default one
textEdit.setTextSize(newSize);