2016-06-10 92 views
17

我是一位UX架构师,与大多数初级的Android开发团队合作。我们在Android中正确设置线条高度方面存在问题。如何正确设置Android的线高?

我们使用Material Design规范作为我们应用程序的指南。特别是,你可以在这里看到行高规格:

https://material.google.com/style/typography.html#typography-line-height

让我们用身体2作为我们的榜样。规范说这种类型是13sp或14sp,并且领先的(行高 - 同样的东西)应该是24dp。

问题出在这里:这些开发者告诉我,没有这种方法来设置代码中的行高。相反,他们告诉我要衡量两行文本之间的距离,并给他们这种措施 - 假设它是4dp。他们希望对我们使用的每种文本风格都适用。

我们正在使用草图> Zepelin流规格。

能够创建一个字体样式(这可能很容易是代码中的类/样式),它是13sp与24dp领先,而不是能够设置领先,而是必须添加第三项措施的组合。在Sketch或Zepelin中没有这样一种“线条间”的措施。

这是否真的是这样做的,或者是否有适当的方法来设置线高?

回答

27

是的,你可以在Android中轻松完成。我也是一名经验丰富的Android开发人员和设计师。我可以理解你的问题。

解决方案很简单。只需在TextViewlineSpacingExtralineSpacingMultiplier中使用这两个属性即可。

例如,

<TextView 
     android:layout_width="match_parent" 
     android:layout_height="80dp" 
     android:lineSpacingMultiplier="2.5" 
     android:lineSpacingExtra="6dp"/> 

EDIT

这些仅意用于控制线和不是字符(又名字距)之间的间距。要控制字符间距,您可以使用我制作的这个库,KerningViews

EDIT 2

android:lineSpacingExtra加线之间的实际的额外空间。你应该使用这个。为了给你提供更多的信息,我给了你android:lineSpacingMultiplier属性,它可以用作TextView高度的比例因子。

如果你想要15dp之间的行间距,使用android:lineSpacingExtra="15dp",你很好去。

+0

我还是有点困惑:)我没有在你的例子中看到'lineSpacingMultiplier'。我认为开发人员正在讨论'lineSpacingExtra'。这是他们正在谈论的“文本之间的空间”。 这等同于说24dp线的高度? – MajorTom

+0

我已经更新了我的答案,请检查。 –

+0

好的,所以6.5 x 2.5 = 15.所以如果我想要15dp的线高度,那是怎么得到它的? (我明白kerning,而不是在kerning之后)。 – MajorTom

1

这是一种以编程方式实现它的方法。

public static void setLineHeight(TextView textView, int lineHeight) { 
    int fontHeight = textView.getPaint().getFontMetricsInt(null); 
    textView.setLineSpacing(dpToPixel(lineHeight) - fontHeight, 1); 
} 

public static int dpToPixel(float dp) { 
    DisplayMetrics metrics = getResources().getDisplayMetrics(); 
    float px = dp * (metrics.densityDpi/160f); 
    return (int) px; 
}