我正在创建一个TextView并动态添加到布局中,我使用textView.setTextSize(18)
方法来设置文本大小。我在三星平板上测试发现字体大小对于这个屏幕来说太小了,所以我将文本大小更改为25,但是对于模拟器(480*800)来说太大了。我的问题是如何动态设置文本大小,以适应所有屏幕。
我正在创建一个TextView并动态添加到布局中,我使用textView.setTextSize(18)
方法来设置文本大小。我在三星平板上测试发现字体大小对于这个屏幕来说太小了,所以我将文本大小更改为25,但是对于模拟器(480*800)来说太大了。我的问题是如何动态设置文本大小,以适应所有屏幕。
编辑: 现在我在StackOverflow上搜索,我发现这个问题是重复的:此问题和这个问题
你需要使用另一个函数setTextSize(unit, size)
,其中单位为SP
,像这样:
tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18f);
请阅读更多关于TypedValue常量的内容。
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>
dimens.xml
一起使用。 - Pratik Butanildpi
、mdpi
或hdpi
限定符。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>
<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);
float currentSize = textEdit.getTextSize(); // default size
float newSize = currentSize * 2.0F; // new size is twice bigger than default one
textEdit.setTextSize(newSize);