Как использовать шрифты в 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».

  1. Помещатьjost_regular.ttfвjvmMain/resources/font/папка.
  2. В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
        )
    )
)


  1. Использование:
          Text(
        text = mainOutput.value .text,
        style = TextStyle(
            fontSize = 48.sp,
            fontFamily = jetbrains.compose.calculator.resources.jostFontFamily
        ),
        overflow = TextOverflow.Ellipsis,
        softWrap = false,
        maxLines = 1,
    )
Другие вопросы по тегам