Android sp vs dp文本-如何调整';比例';支持的理念是什么

Android sp vs dp文本-如何调整';比例';支持的理念是什么,android,textview,android-fonts,Android,Textview,Android Fonts,因此,我们从许多其他帖子中知道,在Android中,我们应该使用sp而不是dp来处理文本,我们知道这样做的原因是为了尊重“用户的偏好” 但这些偏好究竟是什么? 用户如何更改此设置 通过手机上的设置,我找不到任何参考信息(我希望“可访问性”或“显示”中会出现一些内容)。那么什么是用户设置呢?是不是只有像“大字体”这样的应用程序才能完成 假设它是(由类似大字体的东西设置的)——我玩过谷歌文档和其他一些谷歌应用程序,字体设置为130%。虽然大多数布局保持良好,但有些布局会被截断,无法读取(这是在大屏幕

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

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

通过手机上的设置,我找不到任何参考信息(我希望“可访问性”或“显示”中会出现一些内容)。那么什么是用户设置呢?是不是只有像“大字体”这样的应用程序才能完成

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

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


想法/评论?

建议对文本使用
sp
单元,因为在ICS及以上版本中(也可以是蜂窝状的,如果我错了请更正),用户的字体大小是首选的。因此,如果您使用姜饼或更低,您将无法找到此设置

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


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

它在一些Android设备的设置菜单中公开(取决于制造商)。它也可以通过一些可访问性选项进行更改(取决于设备)

通常,应始终使用与缩放无关的像素,尤其是对于大量文本

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


简言之:将文本大小增加约5 SP会导致文本无法阅读或损坏您的UI吗?如果是,则使用与密度无关的像素。如果不是,则使用与比例无关的像素。但是,您通常应尽可能使用与比例无关的像素,这意味着设计一个可以容纳不同文本大小的UI。

答案在于全面地看待这个特定问题

将“sp”用于字体大小的动机在于,当用户在其设备上更改字体大小时,开发人员有权控制其布局

例如:

让我们看两种极端情况:

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

这就是我的布局:

以下是布局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) 如果用户选择字体大小“大”:

以下是我的布局的外观:

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

因此,正如您所看到的,top TextView在sp中有一种完美的字体大小,因为它没有覆盖整个字体大小范围(从小到大)。但在案例2中,底部的文本视图会完全弄乱您的布局/设计)


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

事实上,我认为我早在Honeycom之前就见过“sp”单位,因此我认为它以前就可用。他指的是最终用户文本大小首选项设置在3.0+中可用,而不是
sp
单位。这是从API 1开始出现的。正如Joseph Earl所提到的,这并不是所有设备上都存在的(可能是我找不到它的原因),对吧,这个单元存在于较低版本中,但我相信这个偏好是后来引入的。谢谢你的回答,还有一个很好的经验法则。我想知道我是否可以在ADT布局查看器中快速设置。。。它实际上并不在我的SGS2上的ICS上,所以我想制造商仍然可以保留此选项。为该信息欢呼,将更新我的答案,以反映此选项并非所有ICS设备。这是我所见过的关于何时使用dp或sp的最佳解释。我一直听说您应该始终使用sp作为文本,但确实存在这样的情况:它没有多大意义。如果您需要将文本放入已知大小的框中,那么最好实际使用
sp
作为块大小(而不是
dp
作为文本)我刚刚添加了一个关于@DmitryZaitsev的编辑-我最近使用的技术是在我的
TextView
或框上使用
minHeight
,然后在文本本身上仍然使用
sp
。希望这是一种更好的通用方法,可以处理更多情况(例如多行文本溢出),如果屏幕更窄怎么办?Hi@Sam。我们可以为更窄的屏幕定义单独的布局。您可能在处理大量文档时遇到此页面:)-。上述示例适用于给定的大小,并指出“sp”是一个独立于分辨率的单位。假设我们想在两台尺寸相同但分辨率不同的设备上显示“Lizzy”一词-一台设备的分辨率是另一台设备的两倍。在低分辨率设备上,如果Lizzy水平占据2厘米的空间,那么在高分辨率设备上也会占据同样的空间。对不起,是的,我已经挖通了