android - ?attr/在Android上是什么意思?

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

我正在研究一个关于支持库和工具栏的示例,这是 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

最佳答案

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

最终将使用的实际值取决于用于膨胀所述布局的主题。这个主题可以在 <application/> 的 list 中指定。应用范围主题或 <activity/> 中的 block 阻止特定 Activity 。您还可以在运行时使用不同的上下文覆盖此主题(参见 ContextThemeWrapperLayoutInflater)

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

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

关于android - ?attr/在Android上是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38165168/

相关文章:

java - 启动 BottomSheetFragment 获取结果

android - 如何从 Android 中的另一个类操作 View ?

java - 拆分操作栏不透明

css - 如何将 Material Design 图标用作 CSS 背景图像值?

android - 通过系统应用程序以编程方式静默安装 apk(无 root)

android - Intent 自定义权限不起作用

android - Android Iconography 设计指南是否适用于 Android 5/Material 设计

Android RecyclerView 列表项不显示点击动画

android - Android 应用程序的图像大小

android - Fragment.onCreateView 有空容器