无法覆盖AppTheme字体

时间:2018-04-27 06:37:49

标签: android fonts android-xml

这是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所以我不必在app中的每个组件上设置它。 但我想在应用程序中的一些TextView上设置自定义字体。

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

  1. 在AppTheme风格中使用font属性
  2. with font in AppTheme

    1. AppTheme风格中没有字体属性
    2. with font in AppTheme

      注意:我知道可以使用font或fontFamily,我只是尝试两种方法。所以请忽略它。

1 个答案:

答案 0 :(得分:0)

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属性。