【问题标题】:What does ?attr/ mean on Android??attr/ 在 Android 上是什么意思?
【发布时间】:2016-11-05 00:46:05
【问题描述】:

我正在研究一个关于支持库和工具栏的示例,这是 Android 文档上的布局代码

<android.support.v7.widget.Toolbar
    android:id="@+id/my_toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:elevation="4dp"
    android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>

这是我第一次看到这些?attr,但我不知道它们的含义或这些值存储在哪里。这些是自定义的还是在 Android 框架上预定义的?

参考:Android Toolbar Documentation

【问题讨论】:

    标签: android android-layout material-design android-support-library android-theme


    【解决方案1】:

    ?attr/ 对属性的引用。属性是在应用主题中指定的值。您示例中的属性是支持库提供的主题中指定的所有值。 Android 也有自己的属性,可以与?android:attr/ 一起使用。

    最终将使用的实际值取决于用于膨胀所述布局的主题。此主题可以在清单中的 &lt;application/&gt; 块中为应用程序范围的主题指定,或在 &lt;activity/&gt; 块中为特定活动指定。您还可以在运行时使用不同的上下文覆盖此主题(请参阅 ContextThemeWrapperLayoutInflater

    在布局中使用主题属性而不是硬编码值被认为是一种很好的做法,因为它允许轻松自定义。例如,当您创建自定义视图时,您可以使用?attr/colorAccent,这样视图的用户就不必提供颜色,而是使用应用程序主题中使用的colorAccent

    这在今天变得更加重要,随着 Android Q 中深色主题的引入,您的布局应该指定一个属性,以便在使用浅色主题和深色主题时最终值不同。

    【讨论】:

    • “属性是在您的应用主题中指定的值”。哪个主题? android中有很多主题。如果可能,需要更多解释和示例
    【解决方案2】:

    样式属性资源允许您引用 当前应用的主题中的属性。

    https://developer.android.com/guide/topics/resources/accessing-resources.html#ReferencesToThemeAttributes

    【讨论】:

      【解决方案3】:

      而不是设置静态颜色(#ffffff@color 资源) 我们可以使用?attr/themeAttributeName 委托给主题 句法。此语法意味着:查询主题以获取 this 的值 语义属性。

      Medium 上的 post 对样式和主题进行了相当详细的解释。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-17
        • 1970-01-01
        • 2013-05-15
        • 2011-08-12
        • 2017-06-11
        • 2018-03-05
        • 2023-03-27
        相关资源
        最近更新 更多