Как использовать шрифты в Jetpack Compose for Desktop?
Я пытаюсь использовать файлы шрифтов ttf, помещенные в
src/main/resources/fonts/
в JetBrains Compose для ПК. Как использовать файлы шрифтов в функции? Я пробовал использовать
R.fonts.font_file
упоминается во многих онлайн-статьях, но похоже, что он работает только на Android.
Я знаю, что есть это . Он сталкивается с той же проблемой, что и я. Я пробовал это. К сожалению, это не сработало. Единственный ответ на вопрос, который я связал выше, говорит, что решение заключалось в том, чтобы поместить файлы шрифтов в
src/main/resources
и используйте:
Font(
resource = "font.ttf",
weight = FontWeight.W400,
style = FontStyle.Normal,
)
Но не работает. В
androidx.compose.ui.text.font.Font()
функция на моей машине требует 3 параметра,,
weight
, а также
style
.
public fun Font(
resId: Int,
weight: FontWeight,
style: FontStyle,
)
(скопировано из подсказки к идее)
Как видите, для этого требуется
resId
: Int . Как я должен указать это в Int?
Поскольку JetBrains Compose for Desktop все еще находится на ранней стадии бета-тестирования, ресурсов, которые я мог найти в Интернете, действительно мало. Я попытался найти «идентификатор ресурса kotlin», чтобы найти способ ссылаться на файл шрифта как на идентификатор, но все, что я смог найти, это действительно ориентированные на Android вещи. Я также пробовал искать «jetpack compose desktop font» и «jetbrains compose font», и результаты, которые я получаю, также переполнены Android-вещами. Да, я пробовал использовать "-android" в поисковом запросе, но все, что осталось в результатах, не имеет значения. Связанный мной вопрос - единственное, что я смог найти о шрифте Jetpack Compose for Desktop.
Вот большая часть моего структурыпроекта.
Вот подсказка, которую IntelliJ Idea показывает при наведении курсора
Font()
. Это не так уж и полезно, правда?
Версия Kotlin: 1.5.10
Jetpack compose версия: 0.5.0-build225 (последняя предварительная версия) Кстати, я использую Manjaro Linux на MacBook, если это важно.
Кроме того, я плохо владею английским, поэтому, возможно, я сделал несколько грамматических ошибок.
2 ответа
Вы не можете использовать
androidx.compose.ui.text.font.Font
для этого. Вместо этого импортируйте.
Возможно, как ни странно,
androidx.compose.ui.text.platform.Font
допустимый тип параметра в
androidx.compose.ui.text.font.FontFamily
, и поддерживает
resource
,
weight
а также
style
.
Вот как я использую «jost_regular.ttf».
- Помещать
jost_regular.ttf
вjvmMain/resources/font/
папка. - В
Theme.kt
:
package jetbrains.compose.calculator.resources
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.platform.Font
...
val jostFontFamily = FontFamily(
fonts = listOf(
Font(
resource = "font/jost_regular.ttf",
weight = FontWeight.W400,
style = FontStyle.Normal
)
)
)
- Использование:
Text(
text = mainOutput.value .text,
style = TextStyle(
fontSize = 48.sp,
fontFamily = jetbrains.compose.calculator.resources.jostFontFamily
),
overflow = TextOverflow.Ellipsis,
softWrap = false,
maxLines = 1,
)