一般我们应该用"@+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

更多相关文章

  1. android ListView Item和CheckBox、Button点击事件冲突的问题
  2. 安卓开发36:layout对齐属性总结
  3. (转)Android(安卓)AndroidManifest.xml文件的android:supportsRtl
  4. Android评分控件RatingBar使用实例解析
  5. 1. 2 Textview 及其子类
  6. Android使用FrameLayout应该注意的地方
  7. android 屏幕方向切换 锁定方向
  8. Android(安卓)布局之TableLayout
  9. Android在layout xml中使用include

随机推荐

  1. Android设置状态栏字体颜色
  2. Android自动化构建之Ant多渠道打包实践(下
  3. 关于android内核从linux内核分支上除名
  4. 认清Android(安卓)Studio下的Gradle是什
  5. Android真机测试,连接到本地服务器的方法
  6. Android导出lib时资源id的问题
  7. Android USB串口开发
  8. Android(安卓)使用 aidl 文件创建服务示
  9. Android(安卓)JNI配置及入门
  10. Android Native Crash 捕获之 BreakPad