这是我在style.xml中的AppTheme样式

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:fontFamily" tools:targetApi="jelly_bean">@font/montserrat_regular</item>
    <item name="fontFamily">@font/montserrat_regular</item>
</style>


manifest.xml中的应用程序标签

 <application
        android:name=".Amelio"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"


我想要的是在AppTheme中设置fontFamily,因此我不必在应用程序的每个组件上进行设置。
但我想在应用程序的某些TextView中设置自定义字体。

问题是当我在fontFamily中设置AppTheme时,我无法在任何fontFamily上设置字体或TextView。但是当我从fontFamily删除fontAppTheme时,我可以设置它。这是预览-


在AppTheme样式中具有font属性


android - 无法覆盖AppTheme字体-LMLPHP


AppTheme样式中没有字体属性


android - 无法覆盖AppTheme字体-LMLPHP

注意:我知道可以使用font或fontFamily,如果可以的话我只是在尝试两者。所以请忽略它。

最佳答案

Khemraj建议使用https://stackoverflow.com/a/16407123/6891563是正确的,因为当您要覆盖某个组件的属性时,您需要覆盖其样式,因此在添加时(取自侯赛因·埃尔·费基):

<!-- Into a styles.xml--!>
<style name="RobotoTextViewStyle" parent="android:Widget.TextView">
    <item name="android:fontFamily">sans-serif-light</item>
</style>

<!-- Into a themes.xml--!>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:textViewStyle">@style/RobotoTextViewStyle</item>
    <item name="buttonStyle">@style/RobotoButtonStyle</item>
</style>


您将覆盖所有TextView的样式,因此,每当您使用AppTheme时,TextView组件都将侦听RobotoTextViewStyle属性并使用它们。

08-05 04:34