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

Android 如何为不同屏幕动态设置textview的文本大小,android,Android,我正在创建一个文本视图并动态添加到布局中。我正在使用textView.setTextSize(18)方法设置文本大小。我在三星平板电脑上测试了它,发现字体大小对于这个屏幕来说太小,然后我将textsize更改为25,但对于模拟器来说太大了(480*800)。我的问题是动态设置文本大小,使其适合所有屏幕。您应该使用资源文件夹,如 values-ldpi values-mdpi values-hdpi 并在“dimensions.xml”文件中为每个范围写入文本大小 在java代码中,您可以使用

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

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

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>

15便士
编辑: 当我在StackOverflow上搜索时,我发现这个问题与

您需要将另一个函数
setTextSize(unit,size)
与unit
SP
一起使用,如下所示

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

请阅读更多有关常数的信息。

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

在Style.xml中预先定义样式:

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

在这种情况下,可能不需要使用
ldpi
mdpi
hdpi
限定符

在资源文件中定义维度时,需要包含度量单位。如果您使用sp单元,它们将根据屏幕密度进行缩放,因此15sp的文本在不同密度的屏幕上显示的大小应该大致相同。
(由于Android将屏幕密度概括为
120、160、240、320、480和640 dpi
组,设备的实际屏幕密度不会完全匹配。)

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

调用
setText(float)
sp单位设置大小。这就是问题所在,
您一方面有像素测量,另一方面有
sp单元
来解决此问题:

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>

8sp


您能给我一个写dimensions.xml文件的例子吗?如果在sp中指定了维度,则可能不需要DPI限定符,因为它们是根据屏幕密度(以及用户首选的字体大小)进行缩放的。DP不是比sp更好吗?上述方法能否解决此问题:使用此方法文本大小看起来非常大。实际上,您需要textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,getResources().getDimension(R.dimen.textsize));但这个问题的标题与其他问题相比是完美的duplicate@vnshetty谢谢,编辑。我看不出这个答案中对屏幕大小有任何考虑。我认为这个问题是关于字体大小的。所以我不明白你为什么抱怨没有提到sceen尺寸。在大多数情况下,默认字体具有适当的大小。因此,最好根据较大/较小的默认大小来考虑字体大小,即独立于屏幕大小。所以我写了一个解决方案,可以用来设置相对于默认字体大小的字体大小。为什么是TypedValue.COMPLEX\u UNIT\u PX,现在是TypedValue.COMPLEX\u UNIT\u SP?谢谢,这对我很有用。我们到底需要在哪里创建dimen文件夹?@SudarshanTaparia在这里创建文件夹res/values/dimens.xml并添加文本大小。如何自定义largeText的大小度量?我认为你的答案不太好。更好地使用dimens.xml中的值只有这种方法对我有效,其他方法都会使文本变得非常大!这应该是公认的答案!Android文本大小将始终在sp中指定,而不是在dp或浮点值中指定
<?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);