- Русские Блоги
- Анализ межстрочного интервала Android TextView
- Настройки межстрочного интервала TextView
- android:lineSpacingExtra
- android:lineSpacingMultiplier
- android: lineSpacingExtra и android: lineSpacingMultiplier используются вместе
- setLineSpacing()
- Эффект отображения при различных настройках межстрочного интервала
- Анализ влияния настроек межстрочного интервала
- Получить высоту строки TextView
- Ненормальная ситуация с высотой и интервалом строк TextView
- Анализ исходного кода TextView
- Android Lesson 16. TextView
- Изменение шрифта.
- Межстрочный интервал и цвет фона.
Русские Блоги
Анализ межстрочного интервала Android TextView
Настройки межстрочного интервала TextView
В XML макета есть два параметра для установки межстрочного интервала TextView. Чтобы
Это: android: lineSpacingExtra и android: lineSpacingMultiplier. Чтобы
Его можно установить с помощью метода setLineSpacing () TextView в коде.
android:lineSpacingExtra
android: lineSpacingExtra представляет собой дополнительное значение межстрочного интервала, обычно единицей измерения является dp. Например, android: lineSpacingExtra = ”1dp”. Чтобы
Значение android: lineSpacingExtra может быть отрицательным, десятичным и 0. Если значение положительное, межстрочный интервал увеличивается, если значение отрицательное, межстрочный интервал уменьшается, а если значение равно 0, изменений нет.
android:lineSpacingMultiplier
android: lineSpacingMultiplier представляет собой кратное межстрочному интервалу и не имеет единицы измерения. Например, android: lineSpacingMultiplier = ”1.2”. Чтобы
Значение android: lineSpacingMultiplier может быть любым числом с плавающей запятой. Если значение больше 1.0, это означает увеличение межстрочного интервала, если значение меньше 1.0, это означает уменьшение межстрочного интервала.
android: lineSpacingExtra и android: lineSpacingMultiplier используются вместе
android: lineSpacingExtra и android: lineSpacingMultiplier могут быть установлены вместе в одном и том же TextView. При одновременном использовании он сначала увеличит значение, кратное настройке android: lineSpacingMultiplier, плюс дополнительный интервал, установленный android: lineSpacingExtra.
setLineSpacing()
Прототипом setLineSpacing () является public void setLineSpacing (float add, float mult);
Параметр add представляет значение интервала, которое необходимо увеличить, соответствующее параметру android: lineSpacingExtra. Чтобы
Параметр mult представляет кратное увеличение интервала, соответствующее параметру android: lineSpacingMultiplier.
Эффект отображения при различных настройках межстрочного интервала
Установите различные эффекты отображения android: lineSpacingExtra следующим образом.
Эффект отображения при нормальном межстрочном интервале
Эффект отображения при установке android: lineSpacingExtra = ”2dp”
Эффект отображения при установке android: lineSpacingExtra = ”- 6dp”
Эффект отображения при установке android: lineSpacingExtra = ”- 10dp”
Установите различные эффекты отображения android: lineSpacingMultiplier следующим образом. Чтобы
Эффект отображения при нормальном межстрочном интервале
Эффект отображения при установке android: lineSpacingMultiplier = ”1.2”
Эффект отображения при установке android: lineSpacingMultiplier = ”2.0”
Эффект отображения при установке android: lineSpacingMultiplier = ”0,5”
Эффект отображения, когда установлен android: lineSpacingMultiplier = ”0” (текст не виден, когда он равен 0)
Анализ влияния настроек межстрочного интервала
Измерьте фактический межстрочный интервал под обычным межстрочным интервалом, android: lineSpacingExtra = ”2dp” и android: lineSpacingMultiplier = ”2”, и получите следующие значения
При нормальном межстрочном интервале фактический интервал составляет 12 пикселей.
+ 2dp междустрочный интервал, фактический интервал составляет 18 пикселей
При двукратном увеличении межстрочного интервала фактический интервал составляет 64 пикселя.
Вы можете видеть, что при настройке android: lineSpacingExtra = «2dp» фактический межстрочный интервал также увеличился на 6 пикселей (1dp = 3px на тестовом телефоне), но при настройке android: lineSpacingMultiplier = «2» фактический межстрочный интервал не является обычным межстрочным интервалом. Дважды. Чтобы
Кроме того, если высота текста также включена в измерение, будут получены следующие значения:
При нормальном межстрочном интервале, включая интервал высоты текста, составляет 52 пикселя.
+ 2dp междустрочный интервал, включая интервал высоты текста 58 пикселей
При двухкратном увеличении межстрочного интервала интервал, включая высоту текста, составляет 104 пикселя (здесь используется интервал второй строки, причина будет описана ниже)
В обычном смысле междустрочный интервал относится к расстоянию от низа строки текста до верха следующей строки текста, а высота строки относится к расстоянию от верха строки текста до верха следующей строки текста. Чтобы
Из сравнения видно, что настройки android: lineSpacingExtra и android: lineSpacingMultiplier не влияют напрямую на межстрочный интервал, но влияют на межстрочный интервал через высоту строки. Если задано android: lineSpacingExtra = ”2dp”, высота строки увеличивается на 2dp, а высота текста не изменяется, поэтому межстрочный интервал увеличивается на 2dp. Когда установлено android: lineSpacingMultiplier = ”2”, высота строки увеличивается вдвое, высота текста остается неизменной, а межстрочный интервал увеличивается («высота текста» + «нормальный межстрочный интервал текста»)
Получить высоту строки TextView
TextView предоставляет метод getLineHeight () для получения высоты строки TextView. Чтобы
Для нормального межстрочного интервала высота строки, полученная методом getLineHeight () при настройках android: lineSpacingExtra = «2dp» и android: lineSpacingMultiplier = «2», выглядит следующим образом. Чтобы
Нормальный межстрочный интервал: 52 пикселя
android:lineSpacingExtra=”2dp”:58px
android:lineSpacingMultiplier=”2”:104px
То же, что и фактическое значение измерения.
Ненормальная ситуация с высотой и интервалом строк TextView
Высота каждой строки, фактически отображаемой TextView, не всегда равна высоте строки, полученной методом getLineHeight () (это также означает, что интервал каждой строки не всегда равен высоте строки, полученной методом getLineHeight (), минус высота текста ). Чтобы
Комментарий метода TextView getLineHeight () выглядит следующим образом
Другими словами, если в строке текста есть разметка (я не знаю, что это такое), то высота строки текста может быть больше или меньше высоты, возвращаемой методом getLineHeight (). Кроме того, есть дополнительное пространство для заполнения для первой и последней строк TextView, что приводит к тому, что фактическая высота строки больше, чем высота строки, полученная методом getLineHeight (), а фактический интервал также больше, чем пространство, вычисленное getLineHeight (). Чтобы
Фактическое измерение высоты строки первой строки дает следующие значения. Чтобы
android: lineSpacingMultiplier = «1», «высота первой строки = нормальная высота строки»
android: lineSpacingMultiplier = «2», «высота первой строки = высота нормальной линии + 6 пикселей»
android: lineSpacingMultiplier = «3», «высота первой строки = нормальная высота строки + 12 пикселей»
android: lineSpacingMultiplier = «4», «высота первой строки = высота нормальной линии + 18 пикселей»
То есть «высота первой строки = нормальная высота строки + 6 × (android: lineSpacingMultiplier-1)»
Анализ исходного кода TextView
Чтобы понять, почему параметры android: lineSpacingExtra и android: lineSpacingMultiplier влияют на высоту строки, а не на межстрочный интервал, и почему высота строки первой и последней строк не равна нормальной строке, вам необходимо проанализировать ее с помощью исходного кода TextView. Чтобы
Исходный код конструктора TextView и setLineSpacing () следующий.
То есть настройка android: lineSpacingExtra сохраняется в переменной-члене mSpacingAdd, а настройка android: lineSpacingMultiplier сохраняется в переменной-члене mSpacingMult.
Исходный код TextView getLineHeight () выглядит следующим образом
Вы можете видеть, что TextView вычисляет высоту строки, умножая нормальную высоту на mSpacingMult и добавляя mSpacingAdd. Чтобы
Прослеживая переменные-члены mSpacingAdd и mSpacingMult, было обнаружено, что эти две переменные используются при вызове нового метода построения StaticLayout в методе makeSingleLayout (). Метод generate () вызывается в конструкторе класса StaticLayout, а метод out () вызывается в методе generate (). Вы можете увидеть следующий код в методе out ()
Значение needMultiply определяется как, то есть если установлено любое из android: lineSpacingExtra и android: lineSpacingMultiplier, значение needMultiply истинно.
Затем, если установлено любое из android: lineSpacingExtra и android: lineSpacingMultiplier, будет вычислено дополнительное значение, которое равно (снизу вверх) * (spacingmult-1) + spacingadd с округлением в большую сторону. Чтобы
После этого идет следующий код
Код, связанный с отслеживанием строк [], позволяет увидеть, что строки [] являются ссылкой на mLines, а mLines сохраняет информацию о вертикальном положении каждой строки текста. Каждая обычная строка текста содержит информацию о трех положениях, которые соответствуют трем элементам в mLines ( mColumns = COLUMNS_NORMAL = 3, START = 0, TOP = 1, DESCENT = 2). Чтобы
Следовательно, строки [off + mColumns + TOP] представляют информацию о позиции TOP следующей строки, а строки [off + mColumns + TOP] -lines [off + TOP] могут получить расстояние между верхним положением следующей строки и верхним положением этой строки. , Это высота строки. Очевидно, что lines [off + mColumns + TOP] -lines [off + TOP] = (снизу-вверх) + extra. Если вы проигнорируете процесс округления во время дополнительных вычислений, строки [off + mColumns + TOP] -lines [off + TOP] = (снизу-вверх) + extra = (ниже-вверху) + (ниже-вверху) * (spacingmult- 1) + spacingadd = (снизу вверх) * spacingmult + spacingadd. Это объясняет, почему параметры android: lineSpacingExtra и android: lineSpacingMultiplier влияют на высоту строки, а не на межстрочный интервал. Чтобы
Вы можете увидеть следующий код перед методом out ().
Прослеживая переменную includePad, вы можете видеть, что это значение переменной mIncludePad в TextView, а mIncludePad в TextView имеет фиксированное значение true, поэтому здесь выше = top; будет выполняться, то есть для первой строки текста его позиция выше равна верхней позиции, что может Получить строки [off + mColumns + TOP] -lines [off + TOP] = (снизу-вверх) * spacingmult + spacingadd = (снизу-вверху) * spacingmult + spacingadd. То есть высота строки первой строки текста выше, чем у обычной строки (вверху вверху) * интервал много пикселей. Чтобы
Обратите внимание на настройку выше = top. При измерении высоты первой строки текста ее начальная позиция должна находиться в пустом месте над верхним пикселем текста. В сочетании с указанным выше измерением высоты первой строки можно получить следующие значения. Чтобы
android: lineSpacingMultiplier = «1», «высота первой строки = нормальная высота строки + 6 пикселей»
android: lineSpacingMultiplier = «2», «высота первой строки = высота нормальной линии + 12 пикселей»
android: lineSpacingMultiplier = «3», «высота первой строки = нормальная высота строки + 18 пикселей»
android: lineSpacingMultiplier = «4», «высота первой строки = высота нормальной линии + 24 пикселя»
То есть «высота первой строки — высота обычной строки = 6 × (android: lineSpacingMultiplier)», где 6, очевидно, является значением top-above. Такой же вывод получается в коде.
Источник
Android Lesson 16. TextView
TextView представляет собой обычную текстовую метку. Данный компонент однозначно является одним из самых часто используемых.
Основное свойство android:text. С помощью него можно указать отображаемый текст. Также это можно сделать и программно, методом setText().
Если вы в своем приложении используете текст. то для упрощения локализации в дальнейшем лучше использовать строковые ресурсы. Создайте в файле strings.xml строку с именем perfect_day.
Теперь к этому ресурсу можно обратиться из кода следующим образом:
Свойства textSize и textColor задают соответственно размер и цвет шрифта. А с помощью свойства textStyle можно сделать шрифт, например, жирным:
На панели выбора компонентов вы можете заметить четыре варианта TextView — Plain TextView, Small Text, Medium Text и Large Text. Отличие как раз и состоит в размере шрифта.
Изменение шрифта.
Допустим, вы хотите изменить шрифт для начертания символов на какой-то другой. Для этого можно использовать метод setTypeface():
Файл со шрифтом я поместил в директорию assets в дочернюю директорию fonts, которую я предварительно создал.
Межстрочный интервал и цвет фона.
Для изменение межстрочного интервала у TextView есть свойство:
Для изменения цвета фона воспользуемся свойством backgroundColor:
Источник