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

时间:2012-02-29 05:30:49

标签: android

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

7 个答案:

答案 0 :(得分:259)

编辑: 现在我在StackOverflow上搜索此问题重复ThisThis

您需要使用另一个单位为setTextSize(unit, size)的{​​{1}}函数

SP

请阅读 TypedValue 常量。

答案 1 :(得分:160)

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

values-ldpi
values-mdpi
values-hdpi

并在每个范围的'dimensions.xml'文件中写入文本大小。

在java代码中,您可以使用

设置文本大小
textView.setTextSize(getResources().getDimension(R.dimen.textsize));

示例dimension.xml

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

答案 2 :(得分:66)

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

在资源文件中定义尺寸时,包括测量单位。如果你使用sp单位,它们会根据屏幕密度进行缩放,因此15sp的文本在不同密度的屏幕上看起来应该大致相同。
(设备的实际屏幕密度不会与Android完全匹配将屏幕密度推广到120, 160, 240, 320, 480 and 640 dpi组。)

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

致电setText(float)设置sp units的尺寸。问题在于,您一方面进行了像素测量,另一方面进行了sp unit来解决这个问题:

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

注意您也可以使用

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

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

答案 3 :(得分:40)

经过很长时间的打击,终于解决了这个问题

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

像这样dimen

创建res/values/dimensions.xml文件夹
<?xml version="1.0" encoding="utf-8"?>
<resources>

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

 </resources>

答案 4 :(得分:2)

在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);

答案 5 :(得分:-2)

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

答案 6 :(得分:-8)

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