在 res/values/styles.xml 定義:
<resources>
<style name="MyText" parent="@android:style/TextAppearance">
<item name="android:textColor">#987456</item>
<item name="android:textSize">24sp</item>
</style>
</resources>
parent:繼承現有樣式,可覆寫屬性<EditText style="@style/MyText" .../><style name="CustomTheme" parent="@android:style/Theme">
<item name="android:windowNoTitle">true</item>
<item name="android:windowFrame">@drawable/icon</item>
<item name="android:windowBackground">?android:windowFrame</item> <!-- 引用同主題其他項 -->
</style>
<application android:theme="@style/CustomTheme" ...> ... </application>
<activity android:theme="@style/CustomTheme" .../>
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle saved) {
setTheme(R.style.CustomTheme); // 必須在 setContentView 之前
super.onCreate(saved);
setContentView(R.layout.main);
}
}
| 維度 | Style | Theme |
|---|---|---|
| 作用範圍 | 單一 View | 整個 Activity 或 Application |
| 屬性前綴 | 直接屬性名 | 通常以 window、color 開頭 |
| 繼承關係 | View 樣式繼承 | 系統主題繼承 |
| 動態切換 | 不支援 | 支援(onCreate 前) |
?attr/name 引用主題屬性:<item name="android:background">?attr/colorPrimary</item>Theme.MaterialComponents.Light.DarkActionBarAppCompatDelegate.setDefaultNightMode(MODE_NIGHT_YES)attrs.xml 定義 <attr name="customColor" format="color"/>,Style 中引用android: 前綴)導致不生效