我应该使用dip,dp,sip或sp进行文本格式化吗?

时间:2010-11-23 19:51:55

标签: android text formatting size density-independent-pixel

我不会说我的应用程序文本很重...但它显示的随机字符串有时比其他字符串更长。它们适合我的机器人2,但我知道它们不会在较小的机器人上显示相同。有没有人知道格式化不同大小的文本的正确方法,以确保它适用于所有机器人?

3 个答案:

答案 0 :(得分:6)

如果您只想让某些文字更大或更小,您应该更喜欢使用Android提供的默认样式:

<TextView ... android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView ... android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView ... android:textAppearance="?android:attr/textAppearanceSmall" />

它们都不是默认值,默认为:

<TextView ... android:textAppearance="?android:attr/textAppearance" />

它不仅可以应用于TextView,还可以应用于其他视图。

答案 1 :(得分:3)

Google建议将sp用于文字大小尺寸。您使用的布局需要工作,因此当布局缩放时,它可以尽可能地适用于所有尺寸(您可能需要针对不同尺寸的屏幕布局)。如果文本可能不适合,请将其包装或椭圆化

答案 2 :(得分:0)

SP和DP似乎不像您期望的那样工作。 DP应该是&#34;显示独立&#34;,并且SP被描述为相同;但可以缩放(大概是通过&#34;缩放&#34;命令)。 但是,它们并不像您期望的那样有效。

例如,我有两个设备,一个320x480手机和一个Nexus;这是800x1280 BUT,它将自己描述为sw600(我不知道为什么)。 为了了解发生了什么,我在我的视图中添加了一个textview,其中包含60&#39; X&#39;字符(选择因为它们看起来像mon恒种一样)。

textView textSize设置为10dp,其中60个完全填满了Nexus屏幕。 但是,它们在手机上显示的尺寸完全相同,并且形成了近两行。

因此,似乎DP不是独立显示的;但仅仅描述了每个字符最多给出的(近似)像素数。 在SP中定义维度没有区别。

这不是很有帮助 - 我期望会应用某种形式的缩放,因此我可以在手机上选择合适的尺寸,并且可以针对Nexus进行缩放。

例如,如果我的文本行长度大约为30个字符,并且我希望它在屏幕上填满整行,我会将其定义为10dp;并且每个dp将是一个像素(粗略地)。然后,当它在Nexus上绘制时,每个dp将是两个像素,并且它将显示两倍大小。

据我所知,这不是它的工作原理;这让它变得毫无用处。

我唯一的解决方案,它不是一个优雅的解决方案,只能使用dimens.xml文件中的维度,并且只有六个,每个共同一个宽度(240,320,480,600,720,800 - 更高的任何东西可以自行排序),然后设计我的代码以适应Nexus,并使用我编写的电子表格来扩展dimens.xml中的任何值以获得公共宽度。 这是一种痛苦;但它确实有效。

除非我错误地使用它,否则Android系统就会崩溃。

相关问题