通过书法将字体设置为应用程序中的所有按钮

Aka*_*asH 3 android android-activity

我把我的UI部分分成了一个lib,并在那里创建我的样式.

我有一个所有按钮的默认样式,我就是这样设置的.

<style name="MyTheme.Default">
     <item name="buttonStyle">@style/button</item>
</style>
Run Code Online (Sandbox Code Playgroud)

我的按钮样式是

<style name="button">
    <item name="fontPath">fonts/myfont.ttf</item>
    <item name="android:gravity">center</item>
    <item name="android:clickable">true</item>
    <item name="android:textSize">14sp</item>
</style>
Run Code Online (Sandbox Code Playgroud)

我希望这个按钮样式应用于所有按钮而不调用@style属性.除了字体外,一切似乎都能正常工作.它没有得到应用.

如果我使用@style属性调用,它似乎应用了字体.

我可以使用textAppearance为应用程序中的所有文本应用字体,这也会更改我的按钮的字体.但这是我不想要的行为.

那么,如何在不使用每个按钮的@style属性的情况下通过我的lib将按钮应用于按钮.

Chr*_*ins 6

我不能完全记住,但如果AppCompat在Class Path上,我们不会将默认样式输入到Calligraphy中.您可能需要这样做:

new CalligraphyConfig.Builder().setDefaultFontPath("fonts/Roboto-Light.ttf")
        .addCustomStyle(AppCompatButton.class, R.attr.buttonStyle)
        .setFontAttrId(R.attr.fontPath)
        .build());
Run Code Online (Sandbox Code Playgroud)

记下这条线:

.addCustomStyle(AppCompatButton.class, R.attr.buttonStyle)
Run Code Online (Sandbox Code Playgroud)

这将告诉Calligraphy 默认使用buttonStylefor AppCompatButton的.然后你可以使用:

<style name="MyTheme.Default">
     <item name="buttonStyle">@style/button</item>
</style>
Run Code Online (Sandbox Code Playgroud)