material的主题定义为如下形式:
@android:style/Theme.Material (dark version)
@android:style/Theme.Material.Light (light version)
@android:style/Theme.Material.Light.DarkActionBar
与之对应的Compat theme:
Theme.AppCompat
Theme.AppCompat.Light
Theme.AppCompat.Light.DarkActionBar
当类继承自Activity 时,使用的都是material的主题,然后定制一些属性:
<style name="AppTheme" parent="@android:style/Theme.Material.Light">
<!-- 定制状态栏的颜色 -->
<item name="android:statusBarColor">@color/colorPrimaryDark</item>
<!-- 定制actionbar的样式-->
<item name="android:actionBarStyle">@style/myActionBarStyle</item>
</style>
<style name="myActionBarStyle" parent="android:Widget.ActionBar">
<!-- 定制actionbar的背景色-->
<item name="android:background">@color/colorPrimary</item>
<!-- 定制actionbar上title的样式,颜色,大小-->
<item name="android:titleTextStyle">@style/textStyle</item>
<!-- 控制显示 返回键|LOGO|title-->
<item name="android:displayOptions">homeAsUp|showHome|showTitle</item>
<!-- 控制显示 LOGO-->
<item name="android:icon">@android:color/transparent</item>
<!-- 定制返回键图标-->
<item name="android:homeAsUpIndicator">@android:drawable/ic_delete</item>
</style>
<style name="textStyle">
<item name="android:textColor">@android:color/white</item>
<item name="android:textSize">18sp</item>
</style>
当继承自AppCompatActivity 时,使用的都是Compat theme,ActionBar 必须是引用自v7 包,使用getSupportActionBar(),否则返回为null,去定制Color Palette(调色板),重点有以下几个属性:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- 对应ActionBar的颜色 -->
<item name="colorPrimary">@color/colorPrimary</item>
<!-- 对应状态栏的颜色-->
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<!-- 对应EditText编辑时、RadioButton选中、CheckBox等选中时的颜色 -->
<item name="colorAccent">@color/colorAccent</item>
</style>
属性对应如下图:
动态取色
Palette这个类中提取以下突出的颜色:
需要配置gradle compile 'com.android.support:palette-v7:22.2.0'
Vibrant (有活力)
Vibrant dark(有活力暗色)
Vibrant light(有活力亮色)
Muted (柔和)
Muted dark(柔和暗色)
Muted light(柔和亮色)
//目标bitmap,代码片段
Bitmap bm = BitmapFactory.decodeResource(getResources(),R.drawable.kale);
Palette palette = Palette.generate(bm);
if (palette.getLightVibrantSwatch() != null) {
//得到不同的样本,设置给imageview进行显示
iv.setBackgroundColor(palette.getLightVibrantSwatch().getRgb());
iv1.setBackgroundColor(palette.getDarkVibrantSwatch().getRgb());
iv2.setBackgroundColor(palette.getLightMutedSwatch().getRgb());
iv3.setBackgroundColor(palette.getDarkMutedSwatch().getRgb());
}