看Android系統Style.xml時,發現有些style是這麼寫的:
<style name="Animation.DeviceDefault.Activity" parent="Animation.Material.Activity"/>
我們知道style的繼承寫法即可以使用點,也可以使用parent關鍵字限定,但這種即有.又有parent關鍵字限定的到底繼承誰呢,先不說結論,先看一段代碼:
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
<item name="android:backgroundDimAmount">0.9</item>
<item name="android:scrollbarFadeDuration">251</item>
</style>
<style name="AppTheme_MaterialY" parent="android:Theme.Material.Light"><!-- 這裏是下劃線 -->
<item name="android:colorPrimary">@color/quantum_panel_text_color</item>
<item name="android:colorPrimaryDark">@color/widget_text_panel</item>
<item name="android:colorAccent">@color/outline_color</item>
<item name="android:backgroundDimAmount">0.7</item>
</style>
<style name="AppTheme.MaterialX" parent="@style/AppTheme_MaterialY">
<!-- <item name="android:backgroundDimAmount">0.8</item> -->
</style>
大家先可以試下,然後用Java代碼中去動態獲取Style中各個對應的屬性值:
TypedArray typedArr = getTheme().obtainStyledAttributes(R.style.AppTheme_MaterialX,
new int[] { 0x01010032, 0x010102a8 });<span style="white-space:pre"> </span>// 此處將ids寫死,這個是系統在public.xml中定義好的,所以可以這麼寫,各個系統可能不同
Log.d("wxd_debug", "some float value:" + typedArr.getFloat(0, 0.2f) + ", int value:"
+ typedArr.getInt(1, 250));