尝试声明自定义字体时类型不匹配

时间:2020-05-08 13:04:14

标签: android kotlin android-fonts android-typeface

在设置片段中使用自定义字体时,在这种情况下需要使用哪个上下文?我知道this需要更改,但是我找不到与此相关的任何教程。

类型不匹配。必需:上下文。找到:SettingsFragment

class SettingsFragment : PreferenceFragmentCompat() {
    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
        addPreferencesFromResource(R.xml.preferences)
    }

    private val mTypeface = ResourcesCompat.getFont(this, R.font.open_dyslexic_regular)
}

2 个答案:

答案 0 :(得分:1)

与活动不同,片段不是上下文的子类。您会看到许多Android教程,其中Email mail作为Context参数传递给某个函数,这是因为它们是从Activity内部而不是从Fragment调用该代码。

片段具有this属性,您可以使用,但是在将片段附加到Activity之前(例如,初始化类时)和分离之后,它是context

您可以使用null属性委托,因此在调用lazy函数时上下文不会为空。但是,如果这样做,则不要从拆离片段后可以调用的回调中访问属性。

getFont

答案 1 :(得分:0)

在片段中,您可以调用getContext或getActivity,而不是在获取自定义字体时传递此参数。但是您的代码将崩溃,因为当片段未附加到主机上下文为空时,尝试更改

private val mTypeface : Typeface get() = ResourcesCompat.getFont(requireContext(), R.font.open_dyslexic_regular)