using 和有什么不一样?和@作为样式限定符?

What's the difference between using ? and @ as style-qualifier?

样式属性有一个单独的 ?-qualifier 的目的是什么?为什么不使用@限定符?

    <Button
        style="?android:attr/buttonBarButtonStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@android:drawable/ic_media_play" />  

样式属性资源允许您引用当前应用的主题中的属性值。引用样式属性允许您自定义 UI 元素的外观,方法是将它们设置样式以匹配当前主题提供的标准变体,而不是提供硬编码值。引用样式属性本质上是说,"use the style that is defined by this attribute, in the current theme."

要引用样式属性,名称语法几乎与普通资源格式相同,但使用问号 (?) 代替 at 符号 (@),并且资源类型部分是可选的.例如:

例如,下面是如何引用属性来设置文本颜色以匹配系统主题的 "primary" 文本颜色:

<EditText id="text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="?android:textColorSecondary"
    android:text="@string/hello_world" />

这里,android:textColor属性指定了当前主题中的样式属性名称。 Android 现在使用应用于 android:textColor 辅助样式属性的值作为此小部件中 android:textColor 的值。因为系统资源工具知道在此上下文中需要属性资源,所以您不需要显式声明类型(应该是 ?android:attr/textColorSecondary)——您可以排除 attr 类型。

Source: HERE