Kotlin доступ к активу из фрагмента, чтобы установить шрифт - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь установить шрифт с пользовательским шрифтом из моих активов.В Java это просто, как показано ниже

country2TextView.setTypeface(Typeface.createFromAsset(getAssets(), "open-sans-extrabold.ttf"));

Я хочу получить доступ к assets из фрагмента с этим кодом ниже

country1TextView.setTypeface(Typeface.createFromAsset(context.assets, "open-sans-extrabold.ttf")`)

Но я получил ошибку компилятора Only safe or non null assserted calls are allowed on a nullable receiver type of context

Как получить доступ к активу из фрагмента?good practice, если я просто добавлю оператор безопасного вызова?или это просто обходное решение?Какая лучшая практика для доступа к активу из фрагмента в Kotlin?

Ответы [ 3 ]

0 голосов
/ 02 января 2019
    In Fragment always try to give context with respect to view

country1TextView.setTypeface(Typeface.createFromAsset(country1TextView.context.assets, "open-sans-extrabold.ttf"))

или

        country1TextView.typeface = Typeface.createFromAsset(country1TextView.context.assets, "open-sans-extrabold.ttf"))

`

0 голосов
/ 02 января 2019

Два решения

1.)

country1TextView.setTypeface(
    Typeface.createFromAsset(country1TextView.context.assets, "open-sans-extrabold.ttf")))

2.)

val Fragment.requireContext get() = context!! 

country1TextView.setTypeface(
    Typeface.createFromAsset(requireContext.assets, "open-sans-extrabold.ttf")))

+ 1.) (Технически аналогично 1.)

fun TextView.updateTypeface(typefaceName: String) {
    setTypeface(Typeface.createFromAsset(context.assets, typefaceName)) 
} 

country1TextView.updateTypeface("open-sans-extrabold.ttf")

Обратите внимание, что createTypeface не является бесплатной операцией ниже Android 6.0, поэтому вы должны создать шрифт один раз, а затем использовать его.

0 голосов
/ 02 января 2019

Попробуйте это

 country2TextView?.typeface = Typeface.createFromAsset(context?.assets, "open-sans-extrabold.ttf")

вместо этого

country2TextView.setTypeface(Typeface.createFromAsset(getAssets(), "open-sans-extrabold.ttf"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...