我正在使用支持库更新我的应用程序中的字体。字体在运行时没有在AppCompatCheckBox上更新,但在布局预览中它工作正常。我的应用程序中有两个styles.xml文件,我将AppBaseTheme应用于我的所有活动。
默认styles.xml
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowActionBar">false</item>
<item name="colorPrimaryDark">@color/material_blue_700</item>
<item name="colorPrimary">@color/material_blue_500</item>
<!-- Android widgets styles overridden -->
<item name="android:checkboxStyle">@style/AppCheckBoxStyle</item>
<item name="checkboxStyle">@style/AppCheckBoxStyle</item>
<item name="android:radioButtonStyle">@style/AppRadioButtonStyle</item>
<item name="radioButtonStyle">@style/AppRadioButtonStyle</item>
</style>
<style name="AppCheckBoxStyle" parent="android:Widget.CompoundButton.CheckBox">
<item name="android:fontFamily">@font/allura_regular</item>
</style>
<style name="AppRadioButtonStyle" parent="android:Widget.CompoundButton.RadioButton">
<item name="android:fontFamily">@font/allura_regular</item>
</style>
V21 / styles.xml
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowActionBar">false</item>
<item name="colorPrimaryDark">@color/material_blue_700</item>
<item name="colorPrimary">@color/material_blue_500</item>
<!-- Android widgets styles overridden -->
<item name="android:checkboxStyle">@style/AppCheckBoxStyle</item>
<item name="checkboxStyle">@style/AppCheckBoxStyle</item>
<item name="android:radioButtonStyle">@style/AppRadioButtonStyle</item>
<item name="radioButtonStyle">@style/AppRadioButtonStyle</item>
</style>
<style name="AppCheckBoxStyle" parent="Widget.AppCompat.CompoundButton.CheckBox">
<item name="android:fontFamily">@font/allura_regular</item>
</style>
<style name="AppRadioButtonStyle" parent="android:Widget.CompoundButton.RadioButton">
<item name="android:fontFamily">@font/allura_regular</item>
</style>
答案 0 :(得分:2)
是的,android:fontFamily
不适用于AppCompatCheckbox。
您可以像这样创建一个自定义复选框小部件,并将其用于您的目的。
public class MyCustomCheckBox extends AppCompatCheckBox {
public MyCustomCheckBox(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
public MyCustomCheckBox(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MyCustomCheckBox(Context context) {
super(context);
}
private void init() {
Typeface tf = Typeface.createFromAsset(getContext().getAssets(),
"poppins_light.ttf");
setTypeface(tf);
}
}
答案 1 :(得分:0)
增加@Insane开发人员的答案。 如果使用新的xml字体,则可以使用ResourcesCompat来获取正确的字体。
class CustomFontCheckBox : CheckBox {
constructor(context: Context?) : super(context)
constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr)
init {
typeface = ResourcesCompat.getFont(context, R.font.my_font)
}
}
答案 2 :(得分:0)
此问题在这里报告:https://issuetracker.google.com/issues/63250768
它已在AppCompat库的1.0.2版本上修复:https://mvnrepository.com/artifact/androidx.appcompat/appcompat/1.0.2