问题 何时使用“?android”或“@android”?


我是新手并试图理解以下XML代码:

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


public static final int starStyle 自:API级别1

默认星形样式。

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

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

如果有2个语法,那么“@ [+] [package:] type:name”的正确答案是什么?

我试过“”@android:attr / starStyle“但是我没有得到一个”星“复选框,即使应用程序编译好了。


2109
2017-10-16 02:16


起源



答案:


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

对于应该在主题中定义的starStyle,您需要:

“机器人:ATTR / starStyle”

看到 这里 对主题资源进行一些阐述。


8
2017-10-16 02:43





据我所知...

“?[package:] [type:] name”指的是Android风格。 作为示例,进度对话框样式属性将类似于:

风格= “机器人:ATTR / progressBarStyleLarge”

一个解释

  • ? =?
  • [package:] = android:
  • [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


2
2017-10-16 02:47





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"
/>

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


2
2018-06-10 02:02





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

之后的名字?你是引用在中定义的变量名称吗? <declare-styleable>

@之后的名称是您或系统定义的样式名称。

让我用C ++来比喻一下。

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

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

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


1
2018-04-18 08:23





@用于访问已定义的资源

"@android:drawables/test.png"

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

"?android/attr/style"

希望这可以帮助


0
2018-05-26 05:46





简而言之,我不确定。

 表示资源定义是a的一部分 骨架 

@ 表示资源定义是您的一部分    项目/支持库


0
2018-02-21 07:19