Android中 @和?區別以及?attr/**與@style/**等的區別
@和?的區別
style="?android:attr/progressBarStyleHorizontal"
style="@android:style/Widget.ProgressBar.Horizontal"
- 1
- 2
- 1
- 2
在設定style的時候既可以使用@也可以使用?,他們有什麼區別呢??
- 使用@表示使用固定的style,而不會跟隨Theme改變,這style可以在對應的style.xml中找到。
- 使用?表示從Theme中查詢引用的資源名,這個google叫預定義樣式,用在多主題時的場景,屬性值會隨著主題而改變。(?需要和attr配合使用)
例如上面的progressBarStyleHorizontal,檢視\platforms\Android-23\data\res\values\themes.xml檔案,可以看到在不同的theme中,progressBarStyleHorizontal引用的style是不同的。看下面的示例:
在Theme中
<item name="progressBarStyleHorizontal">@style/Widget.ProgressBar.Horizontal</item>
- 1
- 1
Theme.Holo中為
<item name="progressBarStyleHorizontal">@style/Widget.Holo.ProgressBar.Horizontal</item>
- 1
- 1
style和attr使用區別
style
<!--使用自定義的style-->
@style/Widget.AppCompat.ProgressBar.Horizontal
<!--使用系統自帶的style-->
@android:style/Widget.ProgressBar.Horizontal
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
attr
<!--使用系統自帶的 ,下面兩種方式等效-->
"?android:屬性"
"?android:attr/屬性"
<!--使用自定義的 ,下面兩種方式等效-->
"?attr/屬性"
"?屬性"
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
另外:
當引用系統自帶的style和attr時
"@android:style/主題"和"@style/android:主題"等同
"?android:attr/屬性"和"?attr/android:屬性"等同
- 1
- 2
- 3
- 1
- 2
- 3
自定義隨主題改變的屬性
1、 如果是自定義控制元件,請在style.xml中或attrs.xml中宣告屬性:
<declare-styleable name="SunnyAttr">
<attr name="sunnyTextColor" format="reference"/>
<attr name="sunnyBgColor" format="reference"/>
<attr name="sunnyTextColorWhite" format="color"/>
<attr name="sunnyTextColorRed" format="reference"/>
<attr name="textColor" format="reference"></attr>
</declare-styleable>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
如程式碼第五行所示,必須指明format為reference。這樣自定義控制元件的屬性就可以在xml使用,如果不明白,檢視這裡
2、 因為attr/是跟隨Theme來變化的,所以attr跟隨的屬性必須在Theme裡面宣告:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="sunnyTextColorRed">@color/sunnyTextColorRed</item>
</style>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
3、 在對應的屬性color,drawable等裡面加入相應的資源
<color name="sunnyTextColorRed">#FFFF0000</color>
- 1
- 1
4、這樣就可以在xml中使用自定義控制元件的自定義屬性,這個屬性會隨著主題而改變:
見下面第五行程式碼
<com.smartbracelet.sunny.sunnydemo3.SunnyTextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="設定介面"
app:sunnyTextColor="?attr/sunnyTextColorRed"
/>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
Android xml中 @和?區別,style和attr小結
android中?attr/** 與@drawable/ ** 或@color/**等的區別
轉自:http://blog.csdn.net/xx326664162/article/details/64125654
相關文章
- jquery中prop和attr的區別jQuery
- Jquery中attr和prop的區別jQuery
- Jquery中.attr()和.data()的區別jQuery
- prop()與attr()區別
- jQuery中css()和attr()方法的區別jQueryCSS
- getAttribute() 與 attr() 的區別
- jquery prop和attr的區別jQuery
- offset與style區別
- prop()方法和attr()方法的區別
- CSS中 offsetLeft 與style.left 的區別CSS
- html中list-style-type與list-style的區別HTML
- getAttribute()和attr()一點區別
- list-style與list-style-type的區別
- js中style,currentStyle和getComputedStyle的區別JS
- Android中View自定義XML屬性詳解以及R.attr與R.styleable的區別AndroidViewXML
- jQuery實戰之 attr() 和 prop() 的區別jQuery
- prop()函式和attr()函式的區別函式
- js中==和===的區別以及總結JS
- offsetwidth與style.width 區別
- jquery中attr和prop的區別+jquery實現全選全不選jQuery
- js中!和!!的區別與用法JS
- dom.style.left 與 dom.offsetLeft區別
- 引數為*&與*的區別以及二維陣列傳遞時列數不對等的區別陣列
- android onTouchEvent和setOnTouchListener中onTouch的區別Android
- Javascript中“==”與“===”的區別JavaScript
- js中“==”與"==="的區別JS
- JS的雙等和三等的區別JS
- Oracle - @和@@、&與&& 的區別Oracle
- Checkbox點選多次失效原因,源於Jquery中.attr和.prop的區別jQuery
- mysql中!=和is not的區別MySql
- JavaScript中for in 和for of的區別JavaScript
- mysql中“ ‘ “和 “ ` “的區別MySql
- Js中for in 和for of的區別JS
- JavaScript中==和===的區別JavaScript
- 指標 與 陣列 以及 a 與 &a的區別指標陣列
- java中FileInputStream,FileReader等的區別Java
- SSL與TLS的區別以及介紹TLS
- Mybatis中#{}和${}傳參的區別及#和$的區別小結MyBatis