sp没有很好地处理TextView文本

时间:2014-03-20 16:44:02

标签: android textview

我有一个文字视图:

 <TextView
    android:id="@+id/attribution"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="@string/creative_commons"
    android:textColor="@color/white"
    android:textSize="32sp"
    android:textStyle="bold" >
</TextView>

在xhdpi上它很好地显示在一行:
Creative Commons Attribution 3.0许可下使用的声音

然而,在hdpi中,它看起来像这样:
知识共享署名3.0下使用的声音 许可证

我认为sp(如在32sp中)应该处理屏幕密度 我需要做些什么才能纠正这个问题?

提出以下几点建议:
使用dp没有任何区别。这并不奇怪,因为spdp +用户字体首选项
使用singleLine确实会将它强制到一行,然后在屏幕上运行。

2 个答案:

答案 0 :(得分:1)

解决此问题的一种方法是使用Android资源限定符机制。您可以为具有不同尺寸的屏幕指定替代布局。我认为32sp对于你的机箱中显示较小的设备来说太大了。以下是使用Android资源限定符修复它的方法:

  1. 创建一个文件夹res / layout-sw480dp
  2. 在res / layout文件夹中保留相同的布局文件
  3. 将相同的布局文件复制到新文件夹res / layout-sw480dp,并将字体大小修改为更小(任何看起来适合手机的大小)
  4. 请注意,480x800 mdpi的屏幕选择“480”。对于240x320 ldpi,320x480 mdpi或480x800 hdpi的手机,您可以使用“320”。

    如果您需要详细信息,请参阅http://developer.android.com/guide/practices/screens_support.html

    希望它有所帮助!

答案 1 :(得分:0)

SP类似于DP,但进一步修改为文本大小细节,如用户设置。

但是,DP / SP是“括号”,并且许多分辨率和屏幕尺寸都适合这些相同的括号,并且结果尺寸并不总是完全适合。

因此,您应该专注于使布局自适应,如果您将应用程序本地化,则尤其如此,因为文本在其他语言中的长度不同。