Android之?,@,@+代表的作用和意义

来源:互联网 发布:红包掉落js 编辑:程序博客网 时间:2024/05/08 21:04

Android之?,@,@+代表的作用和意义

文章链接:http://blog.csdn.net/qq_16628781/article/details/68942135

知识点

  1. 资源文件简介;
  2. @,?的作用和意义;
  3. @的使用;
  4. @+的使用;
  5. 新名词记录{资源文件引用@,?;}

概述

在android开发中,资源文件里总是会出现”@string/hello” 、“@android:color/darker_gray”、”@+id/title”、”?android:attr/textAppearanceSmall”,的引用,改如何来理解呢?

我们都知道,我们在资源文件中定义的attr,drawable,values,miamap,string,color,dimens和Androidmanifest文件等,IDE会帮我们编辑在一个叫R.java的文件下面。比如你定义的一个图片名字叫icon,那么在R.java文件中,会建立一个drawable的静态内部类,然后生成一个唯一的标识符(一串数字)代表这个icon图片,我们就可以通过“@drawable/icon”的方式获取。其中“@”代表的是R.java 类,“drawable”代表R.java 中的静态内部类“drawable”,“/icon”代表静态内部类“drawable”中的静态属性“icon”。

既然知道了这个,那么我们如何来引用标识符和添加标识符呢?


@号

引用的格式

@[<package_name>:]<resource_type>/<resource_name>

< package_name>是可选的,默认引用的是当前包名下的资源文件。我们也可以加上android包名,表示引用系统的资源文件。

@引用的android系统定义好的资源文件里。因为在Android系统中自己也有用到很多的资源文件,为了和系统样式统一起来,我们也可以引用系统的资源,使界面更加统一和谐。所以我们如果把包名换成android的话,就可以引用到系统定义好的资源了。如下所示:

android:textAppearance="?android:attr/textAppearanceSmall" android:textAppearance="?android:attr/textAppearanceMedium"android:textAppearance="?android:attr/textAppearanceLarge"android:textAppearance="?android:attr/textAppearanceLarge”@android:color/darker_gray

上面代码引用的是系统的文字样式和系统的颜色darker_gray。

@引用自定义的资源文件,在R.java文件里面找对应的资源标示符,我们可以不写包名,默认的就是我们自己的包名。
在res目录下面,有我们定义的string,color,drawable,anim,layout,xml,dimen等等,我们都可以这样来引用。
代码如下:

@string/app_name@color/blue_light@drawable/app_icon

对应的就是R.java文件下面的string静态内部类的一个叫app_name的字符串资源。这个string是在你的string文件下面定义的。

?号

则是引用的当前的的主题的属性。资源值允许你引用当前主题中的属性值。这个属性值只能在样式资源和XML属性中使用;它允许你通过将它们改变为当前主题提供的标准变化来改变UI元素的外观,而不是提供具体的值。

语法格式如下:

?[<package_name>:][<resource_type>/]<resource_name>

例如:

android:textColor="?android:textDisabledColor"//?android:attr/android:textDisabledColor

代表引用的是主题中按钮不可用时的颜色。

注意:前面的?号,其中包名和资源类型是可选的。


引用的是系统定义好的颜色值:darker_gray;当然,如果你不想要用系统定义的资源,可以自己定义,在@+的时候已经讲过了。


“@+”号

如果我们需要引用资源,那么就必须要在R.java文件中添加一条记录(标识符),方可进行引用。那么如何来添加一条记录呢?

格式如下:

@+<resource_type>/<resource_name>

我们用的最多的就是为控件加入id,以便在代码中引用。如我们android:id=”@+id/tv_title”,表明在R.java文件的静态内部类id下查找对应的标识符,若不存在,则创建,添加一个tv_title的资源标识符;同理的,在string,dimens和styles里面,也是使用@+id的方式添加标识符。但是在drawable,mipmap,anim和attr目录下面呢?这里系统是默认利用文件夹的名字作为resource_type了。所以我们就可以根据drawable来进行访问了。

就到这里了。
如有任何问题,请及时与我联系,谢谢。

0 0
原创粉丝点击