android的問號?和@符號的含義

一般我們應該用"@+id/"來定義一個id,然後用@id來引用一個id。

關於@+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和“@”形式一樣,也是可選。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章