Theme : 算是Style,不過是應用在Activity
A1.
在AndroidMenifest中<application>或<Activity>標籤中使用android:Theme屬性
如設定在<application>標籤中,代表整個app都套用該Theme
如設定在<activity>標籤中,代表只有activity套用該Theme
<activity>中的設定會覆蓋<application>的
打開AndroidMenifest中會發現在<application>中設定了
android:theme="@style/AppTheme"
這是預設的,只是個style的名字,可以直接在這改使用別的Theme,也可以維持使用AppTheme然後改AppTheme這個style的內容
所以去找values/styles.xml,會看到
<resources> <style name="AppTheme" parent="android:Theme.Holo"/> </resources>
name屬性代表該style的名稱(必填)
parent屬性表示該style繼承自哪個theme(非必填)
此處繼承該theme卻又沒做修改,也就是直接使用該theme的意思
使用context.setTheme(int resourceId)
Q2.如何讓元件套用style?
A2.
使用android:style屬性指定
Q3.如何在既有的Theme修改部分屬性?
A3.
於styles.xml中的<style>標籤中夾入<item>標籤
Ex:
<style name="AppTheme" parent="android:Theme.Holo.Light.NoActionBar" > <item name="android:windowIsFloating">true</item> <item name="background">#123</item> </style>
要查有哪些屬性可用,可在Android Developer上查R.attr類別
window開頭的屬性專門用於theme
Q4.如何在不同的Android版本中套用不同的theme?
A4.
使用values資料夾的後綴指定版本號
Ex:
values-v21
values-v17
values
三個資料夾裡都有styles.xml,只是裡面對於同一個name屬性的style所指定的parent屬性不同
API 21以上的系統就會套用values-v21裡指定的theme
API 17~20的系統就會套用values-v17裡指定的theme
API 16以下的系統就會套用values裡指定的theme
※
如果Activity是繼承android.support.v7.app.ActionBarActivity時,該Activity必須使用appCompatv系列的Theme,若不想用,就改成繼承Activity,否則會出現例外
沒有留言:
張貼留言