這些Android系統樣式中的顏色屬性你知道嗎?

Android 系統樣式中的顏色屬性html

推薦閱讀看完後完全搞清楚Android中的 Attr 、 Style 、Themeandroid

幾個經常使用的顏色屬性

先放上一張經典的圖片,圖片來自網絡。git

這張圖在網上非常流傳,也不知道當初是哪位大神標註的,很好的說明了 Android 系統中的幾個經常使用的顏色屬性的做用範圍。github

在開發者官網 R.attr 中給咱們列出了全部的系統屬性,咱們能夠在這裏面找到對應的顏色屬性所表明的意思。網絡

一般咱們新建一個項目的時候在 res/values/styles.xml 中會有下面的定義 Application 的主題樣式。app

<resource>
	    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style>
</resource>
複製代碼

其實樣式遠遠不止如此,在 Android 5.0 開始 Android 系統引入了 Material Design 風格,各個控件在這樣主題下面,風格有很大的變化。爲了在不一樣版本的系統中統一 UI 樣式,設置自定義的 Theme 繼承自 Theme.AppCompat 系列就能夠了。post

關於 AppCompat 相關主題提供的系統屬性,能夠參考源碼:android.googlesource.com/platform/fr…字體

同時因爲部分屬性的版本兼容問題,爲了不添加多個版本的 styles 文件,能夠省略 android: 命名空間google

colorPrimary

App Bar 的背景顏色,也是一個 APP 的主色調。不過 ActionBar 已經不鼓勵使用了,由 Toolbar 來代替,須要給 Toolbar 來設置背景顏色。spa

<android.support.v7.widget.Toolbar android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" />
複製代碼

colorPrimaryDark

status bar(狀態欄)的背景色,僅適用於 Android 5.0及其以上版本。也就是在這個版本你直接能夠經過修改這個屬性來修改狀態欄的顏色。

colorAccent

許多控件在選中狀態或者獲取到焦點的時候會使用這個顏色,好比:

  • CheckBox:checked 狀態
  • RadioButton:checked 狀態
  • SwitchCompat:checked 狀態
  • EditText:獲取焦點的時候的下劃線和光標顏色
  • TextInputLayout:懸浮 label 字體顏色
  • 等等

android:navigationBarColor

navigation bar 的背景色,僅用於 Android 5.0及其以上

colorControlNormal

某些 View 處於普通狀態下的顏色。

好比:

  • 沒有被選中的 CheckBox 或者沒有被選中的 RadioButton

  • 失去焦點時的 EditText ,Toolbar 溢出按鈕顏色

  • 等等

colorControlActivated

在某些時候 colorControlActivatedcolorAccent 的替代品。這種狀況下 colorControlActivate 的顏色是會覆蓋 colorAccent 的顏色的。也就是說,若是你沒有設置的話默認的顏色就是 colorAccent 的顏色

好比:

  • CheckBox 和 RadioButton 的 checked 狀態

colorControlHightlight

全部可點擊 View 觸摸狀態下的 Ripple 效果。僅對 Android 5.0 及其以上有效

colorButtonNormal

Button normal 狀態下的背景色。

這種設置和 Button 的 android:background 所不一樣的是,在 Android5.0 或者更高的版本上使用 colorButtonNormal 的時候會依然保持陰影和 Ripple 觸摸效果

android:windowBackground

窗口背景色,諸如此類還有 android:background android:colorBackground

android:textColorPrimary

APP 的主要文字顏色,好比 actionbar

文本的顏色,好比 Button 中的文本顏色,EditText 中的文本顏色,AlertDialog 中的文本顏色。可是不包括 TextView 中的文字顏色,TextView 中的文字顏色還須要 TextColor 來控制。

固然在設置了 TextColor 的話,TextColor 優先。

editTextColor:

默認 EditView 輸入框字體顏色

TextColor

TextView 的文字顏色

更多查看這裏

樣式介紹

從 Android 5.0 開始,Android 系統引入了 Material Design風格。

md 的主題有:

  • @android:style/Theme.Material(暗主題)
  • @android:style/Theme.Material.Light(亮主題)
  • @android:style/Theme.Material.Light.DarkActionBar

固然了爲了兼容性,咱們通常使用j兼容包裏面的 Them.AppCompat 主題

與之對應的樣式主要有 Them.AppCompatThemeOverlay.AppCompat ,固然他們兩個又有各自的子類。

這兩種樣式也有不一樣的使用方法

Theme.AppCompat 通常用於設置整個應用程序的全局主題

ThemeOverlay.AppCompat 用於覆蓋特定視圖的主題,覆蓋相關的屬性使他們成爲亮或者暗 尤爲是在 Toolbar 中運用。

這樣說能夠不太容易明白,下面經過一個例子來講明。

好比說先個人整個 APP 的主題是這樣的

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style>
複製代碼

默認的文字的顏色是黑的的,那麼顯示效果就會是這樣的

這裏使用了一個 Titlbar 這樣效果和總體很不搭配,咱們須要的是 Titlbar 的背景使用咱們的 colorPrimary 字體的顏色使用 淺色文本樣式 的顏色,那麼這樣咱們就能夠本身定義一個樣式

<style name="sencond" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> <item name="android:background">@color/colorPrimary</item> </style>
複製代碼

<androidx.appcompat.widget.Toolbar android:theme="@style/sencond" app:title="@string/app_name" android:layout_width="match_parent" android:layout_height="wrap_content"/>
複製代碼

而後把這個樣式給 Titlbar設置上,這樣效果就合適了。

固然你本身徹底能夠用屬性來本身完成。

這是 ThemOverlay 樣式的所有樣式了,每一個樣式裏面的內容都很簡單。就是修改一些最基本的屬性,不像 Theme 同樣裏面有那麼多的內容。

參考:juejin.im/post/58f8b6…

相關文章
相關標籤/搜索