【问题标题】:When to use "?android" or "@android"?何时使用“?android”或“@android”?
【发布时间】:2011-12-08 13:50:00
【问题描述】:

我是新手,正在尝试理解以下 XML 代码:

查看 developer.android.com 上的文档,它说“starStyle”是 R.attr 和中的常量


public static final int starStyle 自:API 级别 1

默认星形样式。

必须是对另一个资源的引用,格式为“@[+][package:]type:name”或格式为“?[package:][type:]name”的主题属性。 H2>

似乎说我可以声明两种语法。 1) "@[+][package:]type:name" 2) "?[package:][type:]name".

如果有两种语法,“@[+][package:]type:name”的正确语法是什么?

我尝试了“@android:attr/starStyle”,但即使应用程序编译正常,我也没有得到“星”复选框。

【问题讨论】:

    标签: android


    【解决方案1】:

    @-syntax 用于在您的项目或 Android 框架中定义的资源。 ?-语法用于当前主题中的资源。

    对于应该在主题中定义的starStyle,你想要:

    "?android:attr/starStyle"

    有关主题资源的详细说明,请参阅here

    【讨论】:

      【解决方案2】:

      Android 提供了一个快捷方式,使您能够

      使用当前应用主题的样式。

      为此,请使用?android: 而不是@ 作为您要使用的资源的前缀。

      示例:

      <EditText
      android:id="@+id/myEditText"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:text="@android:string/url"
      android:textColor="?android:textColor"
      />
      

      此技术使您可以创建在当前主题更改时更改的样式,而无需您 修改每个单独的样式资源。

      【讨论】:

        【解决方案3】:

        我不知道...

        "?[package:][type:]name" 指的是 Android 样式。 例如,进度对话框样式属性如下所示:

        style="?android:attr/progressBarStyleLarge"

        解释

        • ? = ?
        • [包:] = 安卓:
        • [type:] = attr(属性)
        • name = progressBarStyleLarge(或者在您的情况下:starStyle)

        不过,样式也可以使用@...

        "@[+][package:]type:name" 是某种资源。

        因此,对于样式,您可以在“values”目录中名为“styles.xml”的文件中声明所有样式。

        <style name="mono_text_headers">
            <item name="android:textSize">16sp</item>
            <item name="android:typeface">monospace</item>
            <item name="android:layout_marginBottom">5dp</item>
        </style>
        

        然后像字符串、drawable 等一样引用它们。 style="@style/mono_text_headers"

        http://developer.android.com/guide/topics/ui/themes.html

        【讨论】:

          【解决方案4】:

          简而言之,我不确定。

          ? 表示资源定义是框架

          的一部分

          @ 表示资源定义是 Your 项目/支持库

          【讨论】:

            【解决方案5】:

            我在这个问题上查了很多,因为它曾经让我很困惑。

            后面的名字?您是否正在引用在&lt;declare-styleable&gt; 中定义的变量名称。

            @后面的名字是你或者系统定义的样式名。

            让我用 C++ 做一个类比。

            说,我们有string str1 = "Hello world"

            ?就像字符串str2 = str1。这意味着您引用了str1 的值。

            @ 就像string str2 = "Hello world"。这意味着您正在直接使用该值。

            【讨论】:

              【解决方案6】:

              @ 用于访问已定义的资源

              "@android:drawables/test.png"
              

              ?用于访问已定义的主题样式

              "?android/attr/style"
              

              希望对你有帮助

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2018-12-20
                • 1970-01-01
                • 2017-11-05
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多