如何为不同的屏幕dynamic设置textview的文字大小
我正在创build一个textview并dynamic添加到布局。 我正在使用textView.setTextSize(18)
方法来设置文本的大小。我在三星平板电脑上testing它,发现字体大小对于这个屏幕来说太小了,然后我改变了文本大小为25,但它太大,模拟器480 * 800)。 我的问题是dynamic设置文字大小,以适应所有的屏幕。
您应该使用资源文件夹如
values-ldpi values-mdpi values-hdpi
并在每个范围的'dimensions.xml'文件中写入文本大小。
在java代码中,你可以设置文本大小
textView.setTextSize(getResources().getDimension(R.dimen.textsize));
示例dimensions.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="textsize">15sp</dimen> </resources>
编辑:而我在StackOverflow现在search,我发现这个问题是重复的 : 这和这个
你需要像这样使用单位SP
另一个函数setTextSize(unit, size)
tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18f);
请阅读更多的TypedValue常量。
在这种情况下,可能不需要使用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()
,它将四舍五入并转换为非小数值。
经过很长时间的打击,终于这样解决了
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.textsize));
创builddimen
文件夹像这样res/values/dimensions.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <dimen name="textsize">8sp</dimen> </resources>
在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);
我想你应该使用textView.setTextSize(float size)方法来设置文本的大小。 textView.setText(arg)用于设置文本视图中的文本。
float currentSize = textEdit.getTextSize(); // default size float newSize = currentSize * 2.0F; // new size is twice bigger than default one textEdit.setTextSize(newSize);