尝试声明自定义字体时类型不匹配
Type mismatch when trying to declare custom typeface
在设置片段中使用自定义字体时,在这种情况下需要使用哪个上下文?我知道 this
需要更改,但我找不到任何相关教程。
Type mismatch. Required: Context. Found: 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)
}
在 fragment 中你可以调用 getContext 或 getActivity 而不是在获取自定义字体时传递它。但是您的代码会崩溃,因为当未附加到主机上下文的片段为空时,请尝试更改
private val mTypeface : Typeface get() = ResourcesCompat.getFont(requireContext(), R.font.open_dyslexic_regular)
与活动不同,片段不是上下文的子class。您会看到许多 Android 教程,其中 this
作为 Context 参数传递给某个函数,这是因为它们是从 Activity 内部而不是从 Fragment 中调用该代码。
Fragments 有一个 context
属性 你可以使用,但它是 null
在 Fragment 附加到 Activity 之前(就像 class 被初始化)和分离之后。
您可以使用lazy
属性委托,这样在调用getFont
函数时上下文不会为空。但是如果你这样做,不要从片段分离后调用的回调中访问 属性。
private val mTypeface by lazy { ResourcesCompat.getFont(requireContext(), R.font.open_dyslexic_regular) }
在设置片段中使用自定义字体时,在这种情况下需要使用哪个上下文?我知道 this
需要更改,但我找不到任何相关教程。
Type mismatch. Required: Context. Found: 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)
}
在 fragment 中你可以调用 getContext 或 getActivity 而不是在获取自定义字体时传递它。但是您的代码会崩溃,因为当未附加到主机上下文的片段为空时,请尝试更改
private val mTypeface : Typeface get() = ResourcesCompat.getFont(requireContext(), R.font.open_dyslexic_regular)
与活动不同,片段不是上下文的子class。您会看到许多 Android 教程,其中 this
作为 Context 参数传递给某个函数,这是因为它们是从 Activity 内部而不是从 Fragment 中调用该代码。
Fragments 有一个 context
属性 你可以使用,但它是 null
在 Fragment 附加到 Activity 之前(就像 class 被初始化)和分离之后。
您可以使用lazy
属性委托,这样在调用getFont
函数时上下文不会为空。但是如果你这样做,不要从片段分离后调用的回调中访问 属性。
private val mTypeface by lazy { ResourcesCompat.getFont(requireContext(), R.font.open_dyslexic_regular) }