Android中Style繼承

看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));


運行後發現結果爲0.7和250,表示沒有取到AppTheme中設定的251,將parent去掉,可以取到251的值,因此可以得出結論,當即有.繼承又有parent指定繼承,parent的繼承是優先的。



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