2016-06-10 2 views
17

Я архитектор UX, работающий с командой разработчиков Android, которые в основном младшие. У нас возникают проблемы с настройкой высоты строки в Android.Как правильно установить высоту строки для Android?

Мы используем спецификацию Material Design в качестве нашего руководства для нашего приложения. В частности, вы можете увидеть высоту строки спецификации здесь:

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

Давайте использовать Body 2 в качестве нашего примера. Спецификация говорит, что тип 13sp или 14sp, а ведущая (высота линии - то же самое) должна быть 24dp.

В этом случае проблема заключается в том, что эти разработчики сообщают мне, что нет такого способа установить высоту строки, как в коде. Вместо этого они говорят мне измерить расстояние между двумя строками текста и дать им эту меру - допустим, это 4dp. Они хотят этого для каждого стиля текста, который мы используем.

Мы используем эскиз> поток Цепелина для спецификации.

Мне кажется странным, что у меня есть возможность создать стиль шрифта (который может легко быть классом/стилем в коде), который является 13sp с 24dp ведущим и не сможет установить ведущий, но вместо этого нужно добавить 3-ей мерой. В Эскизе или Цепелине нет места для такой меры «между линиями».

Действительно ли это так, как это делается, или есть правильный способ установить высоту линии?

ответ

27

Да, вы можете легко сделать это на Android. Я также опытный разработчик Android и дизайнер. Я понимаю вашу проблему.

Решение прост. Просто используйте эти два атрибута в своих TextView, lineSpacingExtra и lineSpacingMultiplier.

Например,

<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 line height, вот как вы его получите? (Я понимаю кернинг, а не после кернинга). – 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; 
} 
0

Вот Реагировать решение туземца: добавить промежуток, который регулирует высоту строки https://github.com/facebook/react-native/blob/master/ReactAndroid/src/main/java/com/facebook/react/views/text/CustomLineHeightSpan.java

Мои коллеги дизайн использовать высоту строки чрезмерно и его боль, что она никогда не выглядит сразу после того, разрывая в приложении.

Я планирую создать собственный класс TextView, который возьмет аргумент XML и опубликует его здесь после.

Смежные вопросы