在设置片段中使用自定义字体时,在这种情况下需要使用哪个上下文?我知道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)
}
与活动不同,片段不是上下文的子类。您会看到许多Android教程,其中this
作为Context参数传递给某个函数,这是因为它们是从Activity内部而不是从Fragment调用该代码。
片段具有context
属性,可以使用,但是在将片段附加到Activity之前(例如,初始化类时)和分离之后,它是null
。
您可以使用lazy
属性委托,因此在调用getFont
函数时上下文不会为空。但是,如果执行此操作,请不要从片段分离后可以调用的回调中访问属性。
private val mTypeface by lazy { ResourcesCompat.getFont(requireContext(), R.font.open_dyslexic_regular) }
在片段中,您可以调用getContext或getActivity,而不是在获取自定义字体时传递此参数。但是您的代码将崩溃,因为如果片段未附加到主机上下文为null,请尝试更改
private val mTypeface : Typeface get() = ResourcesCompat.getFont(requireContext(), R.font.open_dyslexic_regular)