2016-06-10 125 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; 
}