【问题标题】:style and theme support for lower APIs对较低 API 的样式和主题支持
【发布时间】:2019-04-06 22:15:54
【问题描述】:

以下

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="fontFamily">@font/myfont</item>
</style>

工作正常,但以下

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="android:fontFamily">@font/myfont</item>
</style>

需要 API 级别 16。

现在我很困惑,我只是通过删除 android: 前缀来隐藏错误还是这在 android 4.0 上可以正常工作?

【问题讨论】:

    标签: android android-styles android-api-levels


    【解决方案1】:

    首先,让我们考虑一下属性在布局中是如何工作的。如果你使用支持库来处理字体系列,你会这样写:

    <TextView
        app:fontFamily="@font/myfont"
        .../>
    

    另一方面,如果您使用的是框架 API(仅在 API 16+ 上存在),您应该这样写:

    <TextView
        android:fontFamily="@font/myfont"
        .../>
    

    当您创建样式时,任何会在布局中使用 app: 命名空间的东西根本不会得到任何命名空间。所以一个样式指定

    <item name="fontFamily">
    

    将对应于上面的第一个示例,而样式指定

    <item name="android:fontFamily">
    

    将对应于上面的第二个示例。

    无论你选择使用哪一个,都应该遵循这个原则。如果您使用的是支持库,那么删除命名空间是一件好事。如果您不使用支持库,那么删除命名空间是一件坏事。

    tl;dr:在这种情况下删除命名空间是个好主意。

    【讨论】:

    • 非常感谢,我不知道有什么区别。我以为我必须用字体在代码中设置字体
    猜你喜欢
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2011-01-01
    • 2023-03-19
    • 2015-07-20
    • 2020-10-04
    • 1970-01-01
    相关资源
    最近更新 更多