运行时未应用android.support.v7.widget.AppCompatCheckBox系列

运行时未应用android.support.v7.widget.AppCompatCheckBox系列,android,android-support-library,android-fonts,Android,Android Support Library,Android Fonts,我正在使用支持库更新应用程序中的字体。字体在运行时未在AppCompatCheckBox上更新,但在布局预览中,它工作正常。我的应用程序中有两个style.xml文件,我将AppBaseTheme应用于我的所有活动 default styles.xml <style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Theme customizations avail

我正在使用支持库更新应用程序中的字体。字体在运行时未在AppCompatCheckBox上更新,但在布局预览中,它工作正常。我的应用程序中有两个style.xml文件,我将AppBaseTheme应用于我的所有活动

default 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>
<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>

真的
假的
@颜色/材质\u蓝色\u 700
@颜色/材质\u蓝色\u 500
@样式/AppCheckBoxStyle
@样式/AppCheckBoxStyle
@样式/附件按钮样式
@样式/附件按钮样式
@字体/allura_常规
@字体/allura_常规
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="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>
<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>

真的
假的
@颜色/材质\u蓝色\u 700
@颜色/材质\u蓝色\u 500
@样式/AppCheckBoxStyle
@样式/AppCheckBoxStyle
@样式/附件按钮样式
@样式/附件按钮样式
@字体/allura_常规
@字体/allura_常规

是,
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);
    }
}

补充@Inasen开发者的答案。 如果使用新的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)
    }
}

本期报道如下:


AppCompat库的1.0.2版本中已经修复了它:

是否有关于此限制的文档。那么为什么它在android studio的布局预览中工作?目前不可能。在Android Bug跟踪器中检查此线程。Android bug tracker上已经报告了这个问题,启动它以尽快修复:如果您使用新的字体系统,请替换
Typeface tf=Typeface.createFromAsset(getContext().getAssets(),“poppins_light.ttf”)字体为tf=ResourcesCompat.getFont(this.ctx,R.font.poppins\u light)。你可以找到更多的信息