28

所以我们从许多其他帖子中知道,我们应该在 Android 中使用 sp 而不是 dp 来表示文本,我们知道这样做的原因是为了尊重“用户的偏好”。

但这些偏好究竟是什么?用户如何更改此设置?

我无法通过手机上的设置找到任何参考(我本来希望在“辅助功能”或“显示”中有一些东西)。那么什么是用户设置?是否只能通过诸如“大字体”之类的应用程序来完成?

假设它是(由类似大字体的东西设置) - 我玩过谷歌文档和其他一些谷歌应用程序,字体设置为 130%。虽然大多数布局都很好,但有些布局被截断并且无法读取(这是在大屏幕 SGS2 上)。那么,使用“sp”开发具有文本大小的应用程序的方法是什么?我们是否确保它适用于 100% 缩放,然后忽略其他设置 - 称其为用户可以担心的特殊情况,或者我们是否竭尽全力确保内容扩展或可滚动,以防文本溢出?

一个论点是我们应该使用“dp”来保证用户有机会看到文本(即使他们必须使用放大镜)

想法/评论?

4

3 回答 3

61

它显示在某些 Android 设备的设置菜单中(取决于制造商)。它也可能被一些可访问性选项(取决于设备)改变。

通常,您应该始终使用与比例无关的像素,尤其是对于大量文本。

但是,如果您的文本必须适合已知大小的边界框,那么您应该使用与密度无关的像素,以确保文本始终正确适合,并且无论用户的设置如何,所有字符都是可见的。

简而言之:将文本大小增加大约 5sp 会导致文本不可读或破坏您的 UI?如果是这样,请使用与密度无关的像素。如果不是,请使用与比例无关的像素。但是,您通常应该尽可能使用与比例无关的像素,这意味着设计一个可以适应不同文本大小的 UI。

于 2012-07-24T20:37:25.503 回答
6

建议对文本使用sp单位,因为在 ICS 及更高版本中(也可能是 Honeycomb,如果我错了,请纠正我),对用户的字体大小偏好。因此,如果您使用的是 Gingerbread 或更低版本,您将无法找到此设置。

首选项位于设置、显示、字体大小下。在设置、辅助功能、大文本下也有一个选项。

要解决您关于如何使用的问题sp,请注意,默认情况下,在不更改任何字体大小首选项的情况下,1sp等效于1dp(此外,在引入首选项之前它们是等效的)。正如您所指出的,针对用户拥有大量文本的情况进行设计可能会要求您假设内容需要滚动到您可能不希望它们滚动的地方。

于 2012-07-24T20:31:04.337 回答
1

答案在于从整体上看待这个特定问题。

使用“sp”字体大小的动机在于让开发人员能够在面对用户更改其设备上的字体大小时控制其布局。

例子:

让我们看两个极端情况:

1)用户选择字体大小“小”

这是我的布局的样子:

http://postimg.org/image/kiyqeo2bh/

这是布局xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
tools:context=".MainActivity"
android:orientation="vertical">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_row="0"
    android:layout_column="0"
    android:text="Material-Design ist die Scheiße"
    android:textSize="18sp"
    android:background="#ffff0000" />
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_row="0"
    android:layout_column="0"
    android:text="Material-Design ist die Scheiße"
    android:textSize="25sp"
    android:background="#ffff0000" />

2)如果用户选择字体大小“巨大”:

这就是我的布局:

http://postimg.org/image/d7rax9wob/

在案例 1) 中,我的布局 xml 与上面相同。

因此,正如您所看到的,顶部的 TextView 在 sp 中具有某种完美的字体大小,因为它不会对整个字体大小范围(从小到大)进行换行。但是在案例 2) 中,底部的 TextView 完全搞砸了你的布局/设计。

因此,作为开发人员,您可以迭代并决定 sp 中的大小适合您的设计,而 android 将为您绘制它。

于 2015-07-25T23:18:22.243 回答