引用资源时,使用@还是?的区别,例如在设置style的时候既可以使用@也可以使用?

 style="?android:attr/progressBarStyleHorizontal"
style="@android:style/Widget.ProgressBar.Horizontal"

使用@表示使用固定的style,而不会跟随Theme改变,这style可以在对应的style.xml中找到。 
而?表示从Theme中查找引用的资源名,例如上面的progressBarStyleHorizontal,查看\platforms\Android-23\data\res\values\themes.xml文件,可以看到在不同的theme中,progressBarStyleHorizontal引用的style是不同的。如

在Theme中

<item name="progressBarStyleHorizontal">@style/Widget.ProgressBar.Horizontal</item>

Theme.Holo中为

 <item name="progressBarStyleHorizontal">@style/Widget.Holo.ProgressBar.Horizontal</item>

1、在styles.xml中定义style标签的parent的时候

自带属性,以下使用方式等同

<style name="AppThemeSdk1" parent="@android:style/Widget.ProgressBar.Horizontal">
</style>
<style name="AppThemeSdk2" parent="android:style/Widget.ProgressBar.Horizontal">
</style>
<!--studio 不提示 但不报错 可用-->
<style name="AppThemeSdk3" parent="android:style/Widget.ProgressBar.Horizontal">
</style>
<!--studio 不提示 但不报错 可用-->
<style name="AppThemeSdk4" parent="android:Widget.ProgressBar.Horizontal">
</style>

自定义属性,以下使用方式等同

   <style name="AppThemeCustom1" parent="Widget.AppCompat.ProgressBar.Horizontal">
</style>
<style name="AppThemeCustom2" parent="@style/Widget.AppCompat.ProgressBar.Horizontal">
</style>
<!--studio 不提示 但不报错 可用-->
<style name="AppThemeCustom3" parent="style/Widget.AppCompat.ProgressBar.Horizontal">
</style>

2、style作为xml中定义的属性时候

<!--自定义的-->
@style/Widget.AppCompat.ProgressBar.Horizontal
<!--系统自带的-->
@android:style/Widget.ProgressBar.Horizontal

3、? attr

<!--系统自带的 ,以下使用方式等同-->
"?android:属性"
"?android:attr/属性"
<!--自定义的 ,以下使用方式等同-->
"?attr/属性"
"?属性"

另外: 
当引用系统自带的style和attr时

"@android:style/主题"和"@style/android:主题"等同

"?android:attr/属性"和"?attr/android:属性"等同

from:http://blog.csdn.net/RichieZhu/article/details/52490521

 
 

【转】 Android xml中 @和?区别,style和attr小结的更多相关文章

  1. Android XML中引用自定义内部类view的四个why

    今天碰到了在XML中应用以内部类形式定义的自定义view,结果遇到了一些坑.虽然通过看了一些前辈写的文章解决了这个问题,但是我看到的几篇都没有完整说清楚why,于是决定做这个总结. 使用自定义内部类v ...

  2. android xml中使用include标签

    在一个项目中,我们可能会在xml中局部用到相同的布局,如果每次都在xml中重写这些布局,代码显得很冗余.重复的复制黏贴也很烦恼,所以,我们把这些相同的局部布局写成一个单独的xml模块,需要用到这些布局 ...

  3. 4、android xml中drawableTop(drawableBoottom、drawableLeft、drawableRight)在java代码中的动态配置

    做安卓开发的朋友都知道,我们在xml中可以通过这样来对button设置其上部或者(下.左.右)的图片资源: 那么如果需要动态配置图片呢?我们不得不使用java代码来进行操作: Drawable dra ...

  4. android xml中的xliff属性

    <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff=" ...

  5. Android开发之Theme、Style探索及源码浅析

    1 背景 前段时间群里有伙伴问到了关于Android开发中Theme与Style的问题,当然,这类东西在网上随便一搜一大把模板,所以关于怎么用的问题我想这里也就不做太多的说明了,我们这里把重点放在理解 ...

  6. Android开发中的PhoneGap基本使用

    一.关于PhoneGap Phonegap是一款开源的开发框架,旨在让开发者使用HTML.Javascript.CSS等Web APIs开发跨平台的移动应用程序.   二.PhoneGap在Andro ...

  7. (转载)Android xml资源文件中@、@android:type、@*、?、@+引用写法含义以及区别

    原帖地址:http://blog.csdn.net/zfrong/article/details/7332545 Android xml资源文件中@.@android:type.@*.?.@+引用写法 ...

  8. Android xml资源文件中@、@android:type、@*、?、@+含义和区别

    一.@代表引用资源 1.引用自定义资源.格式:@[package:]type/name android:text="@string/hello" 2.引用系统资源.格式:@andr ...

  9. 【转】Android xml资源文件中@、@android:type、@*、?、@+含义和区别

    一.@代表引用资源 1.引用自定义资源.格式:@[package:]type/name android:text="@string/hello" 2.引用系统资源.格式:@andr ...

随机推荐

  1. Javascript实现图片翻转

    使用Js的对象属性能实现简单的翻转效果.通过onMouseover事件和onMouseOut事件就能实现鼠标移到链接上和移开链接发生反应.给两个图片加上链接实现都能翻转的效果. reverse.htm ...

  2. WCF使用net.tcp绑定的配置实例

    <system.serviceModel> <bindings> <basicHttpBinding> <!--默认http绑定的配置,这里提高了最大传输信息 ...

  3. 说说HTML5中label标签的可访问性问题——张鑫旭

    一.开篇叨叨 一般稍微有些经验的页面制作人员都知道label标签可以优雅地扩大表单控件元素的点击区域,例如,单纯的单选框点击区域就鼻屎那么大的地方,经常会点不到位置.因此,label标签的使用对于提高 ...

  4. css 相对单位rem详解

      CSS3新增了一个相对单位rem(root em,根em),这个单位引起了广泛关注.这个单位与em有什么区别呢?区别在于使用rem为元素设定字体大小时,仍然是相对大小,但相对的只是HTML根元素. ...

  5. Git 学习之git 分支(三)

    Git 分支 几乎每一种版本控制系统都以某种形式支持分支.使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作.在很多版本控制系统中,这是个昂贵的过程,常常需要创建一个源代码目录的 ...

  6. marquee 滚动到文字上时停止滚动,自定义停止方法

    我要实现的效果如下图:当鼠标移到续费提醒文字上时,文字滚动停止,并出现后面的关闭按钮:当鼠标移出文字时,文字继续滚动,后面的关闭按钮不显示. 在网上查到的marquee停止滚动的的代码是这样的: &l ...

  7. elixir 表单 map

    键-值对 iex(13)> map = %{:a => 1, 2 => :b}%{2 => :b, :a => 1}iex(14)> map[:a]1iex(15) ...

  8. linux 用户管理 groupadd、groupmod、groupdel、gpasswd

    添加用户组groupadd [选项] 组名 /usr/sbin/groupadd执行权限:root一个用户可以属于多个所属组,但有一个缺省组,和用户名同名-g GID:指定组ID 修改用户组 grou ...

  9. spring多线程初探

    6月14号  晴  最高温度37   今天很热的一天啊,开发的任务现在正在测试阶段,手头没有什么工作任务,忙里偷闲,丰富一下我的blog. 前两天有个需求:调用第三方接口,这个接口的响应时间有点长,需 ...

  10. JConsole监控Java程序的运行情况

    JConsole 一.JConsole是什么 从Java 5开始 引入了 JConsole.JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行.您可以轻松 ...