一般我们应该用"@+id/"来定义一个id,然后用@id来引用一个id,但是现在我发现apps/settings/res/layout/preferenc_progress.xml中有个"@+android:id/title",怎么理解它?怎么用?

加上android:表示引用android.R.id里面定义的id资源,如果android.R.id里面确实有title这个id资源,就直接使用它,如果没有的话就在当前应用的R.id中产生一个title标识
id是控件的一个基本属性,这并不代表每个控件的id都不一样,其实控件的id属性是可以相同的,
所有的控件被加载到内存以后就会形成一个控件树形结构,当查找控件的时候,只返回第一个id匹配的控件,所以如果一个页面中有相同id的控件,比如listview的item,当查找控件的时候要从它最邻近的一个父节点开始查找,这样才会命中

@表示引用资源,声明这是一个资源引用—随后的文本是以@[package:]type/name形式提供的资源名。
@android:string表明引用的系统的(android.*)资源
@string表示引用应用内部资源
对于id, 可以用@+id表明创建一个id
?表示引用属性
“?”引用主题属性,当您使用这个标记,你所提供的资源名必须能够在主题属性中找到,因为资源工具认为这个资源属性是被期望得到的,您不需要明确的指出它的类型(?android:attr/android:textDisabledColor)。

使用主题属性 :
另外一种资源值允许你引用当前主题中的属性的值。这个属性值只能在样式资源和XML属性中使用;它允许你通过将它们改变为当前主题提供的标准变化来改变UI元素的外观,而不是提供具体的值。
如例中所示,我们在布局资源中使用这个特性将文本颜色设定为标准颜色的一种,这些标准的颜色都是定义在基本系统主题中:

Java代码
<?xml version="1.0" encoding="utf-8"?>
<EditText id="text"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:textColor="?android:textDisabledColor"
android:text="@string/hello_world" />


注意,这和资源引用非常类似,除了我们使用一个“?”前缀代替了“@”。当你使用这个标记时,你就提供了属性资源的名称,它将会在主题中被查找 ——因为资源工具知道需要的属性资源,所以你不需要显式声明这个类型(如果声明,其形式就是?android:attr/android:textDisabledColor)。
除了使用这个资源的标识符来查询主题中的值代替原始的资源,在这里关于该类型的name语法:?[namespace:]typpe/name和“@”形式一样,也是可选。
http://griffinshi.iteye.com/blog/602737
出处: http://lhdst-163-com.iteye.com/blog/1175279

更多相关文章

  1. Android中的资源与国际化!
  2. Android三种动画详解
  3. Android布局——Linearlayout线性布局
  4. Android控件TextView中ellipsize属性(设置当文字长度超过textview
  5. Android中的windowSoftInputMode属性详解
  6. Android(安卓)自定义Html标签
  7. Android属性动画AnimatorSet源码简单分析
  8. Android开发资源完全汇总
  9. Android(安卓)控件一 TextView

随机推荐

  1. 期待周末,补个觉、撸篇文
  2. AQS简简单单过一遍
  3. 一览 JDK 并发包(J.U.C)
  4. JDK 1.8 中的日期与时间 API 一览
  5. Mybatis001-第一个Mybatis程序
  6. 新零售智能化升级:RPA+AI塑造客服数字化新
  7. 来吧,一起刷题!Inversion of Java Intervie
  8. 拆分示例,补个思维导图
  9. MySQL 单表上亿,怎么优化分页查询?
  10. MySQL如何配置读写分离?