繁体   English   中英

文本大小、不同密度设备和材料设计

[英]Text sizes, different density devices and material design

当涉及到 fonts 时,我正在尽力遵循材料设计指南,但我正在努力解决我遇到的问题,而无需使用依赖于密度的尺寸。 我的问题是;

我正在为我的 fonts 使用 styles ,这是一个例子;

<style name="Text.MyApp.Heading3" parent="TextAppearance.MaterialComponents.Headline3">
    <item name="android:fontFamily">?attr/RegularFont</item>
    <item name="fontFamily">?attr/RegularFont</item>
    <item name="android:textSize">?attr/TextSizeHeadingThree</item>
</style>

并将其用作文本的样式,我的字体大小来自材料指南,因此对于标题 4 我有

<dimen name="text_size_heading_three">48sp</dimen>

我的问题是,我有一个视图,屏幕上连续使用 Heading3 的两个数字,这可能看起来像+£100.00 | -£200.00 +£100.00 | -£200.00 ,这些限制在中间的分隔视图中。

我的问题出在 Pixel 4 XL (xx-hdpi) 上,这看起来不错,但是将其放到 Nexus S (hdpi) 上,文本会挤压在一起,与中间的分隔符重叠,并略微脱离屏幕末端.

我对使用 SP 的理解是,它会缩放这个似乎没有发生的文本大小,还担心 SP 从用户的文本大小偏好中获取,因此可能会增加设备的文本大小也打破这个。

只需将此文本视图的 hdpi 字体大小更改为较小的文本大小,有没有办法可以使这种样式随屏幕缩放?

sp 实际上根据屏幕像素密度和系统所选字体大小进行缩放。

您面临的问题与屏幕的实际宽度有关。

要实现您想要的,您可以尝试以下两种方法之一:

  • 对于每个屏幕宽度,您的尺寸具有不同的 sp 值。 您可以通过创建额外的资源文件来做到这一点,这些资源文件将包含您的尺寸值并且取决于屏幕宽度。 您可以在此处阅读有关此内容的更多信息:

https://developer.android.com/training/multiscreen/screensizes#TaskUseSWQuali

  • 使用自动调整大小的 TextView。 您可以在这里找到更多信息:

https://developer.android.com/guide/topics/ui/look-and-feel/autosizing-textview

sp单位实际上是关于用户选择的文本大小

Scale-independent Pixels - 这类似于 dp 单位,但它也根据用户的字体大小偏好进行缩放 建议您在指定字体大小时使用此单位,以便根据屏幕密度和用户偏好进行调整。

基本上,用户可以在他们的设备上选择文本的一般大小,并将dp值乘以特定因子(正常是* 1.0 ,我认为 Huge 是* 2.0 ),这就是sp值。 当您在sp中指定大小时,您允许系统放大该文本,以便所有人都能阅读。

因此,您在设计时需要注意这一点 - 始终值得拥有一个小屏幕(有限空间)的模拟器并将文本大小设置为最大设置,以确保一切仍然适合那些极端情况。

我认为你有四个选择:

  • 减小布局中字体的sp大小,使其始终适合
  • 为不同的配置制作不同的布局,并进行调整(为您做更多工作)
  • 使用TextView的大小,就像@kandrit 提到的那样 - 设置你想要填充的空间,它会缩放文本大小以适应它(这听起来像你所期望的,你可以调整一些东西,比如拥有一组固定的可能大小)
  • 不要使用sp ,而是使用dp (不会根据用户的喜好进行缩放 - 但超过一定大小,它不需要,因为它是可读的)

您会收到关于最后一个警告的警告,但在我看来,这完全没问题,并且在某些情况下是正确的做法。 想想一个在屏幕中间有一个时钟的应用程序——它是固定大小的,设计和布局都以某种方式进行,而且它足够大,易于阅读。 它旨在以特定方式显示,占据屏幕的特定区域,并且无需更改大小 - 因此在dp中定义它就像任何其他视觉元素一样有意义。 也许这适用于您正在做的事情!

问题不在于您的文字大小,而在于您的布局设计

我也有类似的问题,我通过为放置在约束布局内的视图提供边距来解决它,因此在大屏幕的情况下,它将使用约束并忽略边距的值,在小屏幕的情况下,它使用边距的值保持视图分开

如果您使用的是线性布局,则将 layout_weight 设置为 1 并为视图提供边距,那么它将与约束布局一样工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM