我正在创建一个textview并动态添加到布局中。我正在使用textView.setTextSize(18)
方法来设置文本大小。我在三星平板电脑上测试了它,发现字体尺寸对于这个屏幕来说太小了然后我将文本大小更改为25但是它对于模拟器来说太大了(480 * 800)。我的问题是动态设置文本大小,使其适合所有屏幕。
答案 0 :(得分:259)
编辑: 现在我在StackOverflow上搜索此问题重复:This和This
您需要使用另一个单位为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)
在这种情况下,可能不需要使用ldpi
,mdpi
或hdpi
限定符。
在资源文件中定义尺寸时,包括测量单位。如果你使用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);