[英]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 实际上根据屏幕像素密度和系统所选字体大小进行缩放。
您面临的问题与屏幕的实际宽度有关。
要实现您想要的,您可以尝试以下两种方法之一:
https://developer.android.com/training/multiscreen/screensizes#TaskUseSWQuali
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.