Inconsistency when setting TextView font size in code and in resources(在代码和资源中设置 TextView 字体大小时不一致)
问题描述
官方文档似乎没有回答这个问题,或者我可以想不通.
The official documentation does not seem to answer this, or I can't figure it out.
元素(别管 AlertDialog
,它也发生在任何 TextView 上):
Element (nevermind the AlertDialog
, it happens on any TextView as well):
TextView tv = (TextView) dialog.findViewById(android.R.id.message);
不一致.案例A:
tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14);
// or tv.setTextSize(14); does the same
案例 B:
tv.setTextSize(getResources().getDimension(R.dimen.text_size_small));
// TypedValue makes no difference either.
values/dimens.xml
在哪里:
<dimen name="text_size_small">14sp</dimen>
结果:字体大小不一样,从资源中检索时显得更大.我可能遗漏了一些东西,所以我的错误是什么,最重要的是:为什么?
Result: font size is not the same, and appears much bigger when retrieving from resource. I'm probably missing something, so what's my mistake, and the most important: why?
-- 更新到第一个答案--
固定数字只是一个例子,因为没有人会在代码中硬编码固定字体大小.所以让我重新表述这个问题:
The fixed number was just an example, as nobody would hard code fixed font sizes in code. So let me rephrase the question:
为什么如果我从代码中获取资源,文本大小比我从 XML 布局中获取资源时大? 此外,问题仍然相同:如何检索 14sp代码中的单元并使其与布局 XML 中设置的 14sp 单元保持一致?我没有接受答案,因为它没有告诉我如何在代码中使用资源中的 sp 单位来获取文本大小.
Why if I get the resource from code, the text size is bigger than when I get the resource from a XML layout? Besides, the question is still the same: how do I retrieve a 14sp unit in code and keep it consistent with the 14sp unit that is set in the layout XML? I did not accept the answer because it does not tell me how to use sp units from resource in code for text size.
在这种布局上,字体大小不同,即使尺寸相同:
On this layout, the font size is different, even if the dimension is the same:
<TextView
android:id="@+id/my_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/TextBody" />
styles.xml:
styles.xml:
<style name="TextBody">
<item name="android:textSize">@dimen/text_size_small</item>
<item name="android:lineSpacingMultiplier">1.1</item>
<item name="android:textColor">@color/body_text_1</item>
<item name="android:textIsSelectable">true</item>
<item name="android:linksClickable">true</item>
</style>
看到 text_size_small 了吗?为什么在这种情况下字体大小比代码中的小,使用相同的 dimen
资源?
See text_size_small there? Why in this case the font size is smaller than in the code, using the same dimen
resource?
推荐答案
你应该使用 setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
因为 getDimension
方法的文档声明它返回一个 Resource 维度值乘以适当的指标.
我理解为预先计算的绝对 px 值.
You should use setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize);
because the documentation of the getDimension
method states that it returns a Resource dimension value multiplied by the appropriate metric.
which I understand to be the precalculated absolute px value.
即使用:
tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.text_size_small));
这篇关于在代码和资源中设置 TextView 字体大小时不一致的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在代码和资源中设置 TextView 字体大小时不一致
基础教程推荐
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01