如何为不同的屏幕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常量。

在这种情况下,可能不需要使用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() ,它将四舍五入并转换为非小数值。

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

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