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

问题描述 投票:0回答:2

在设置片段中使用自定义字体时,在这种情况下需要使用哪个上下文?我知道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 kotlin android-fonts android-typeface
2个回答
1
投票

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

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

您可以使用lazy属性委托,因此在调用getFont函数时上下文不会为空。但是,如果执行此操作,请不要从片段分离后可以调用的回调中访问属性。

private val mTypeface by lazy { ResourcesCompat.getFont(requireContext(), R.font.open_dyslexic_regular) }

0
投票

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

private val mTypeface : Typeface get() = ResourcesCompat.getFont(requireContext(), R.font.open_dyslexic_regular)
© www.soinside.com 2019 - 2024. All rights reserved.