主题和样式
主题和样式都使用<style>
标签,但是他们所服务的目的截然不同。
样式
样式是View属性值的集合,一个view只能使用一个样式。
<Button …
style="@style/Widget.Plaid.Button.InlineAction"/>
主题
- 主题是一组命名的资源的集合,这些资源可以被样式或布局文件引用。
- 可以将主题设置给Application/Activity/View/ViewGroup。
- 比如 Activity 包含 ViewGroup,而 ViewGroup 又包含 View。把主题背景设置到一个树状结构的任意一层,此层及下一层都会受到影响。比如把主题背景设置给一个 ViewGroup,此 ViewGroup 包含的所有子 View 都会受到这个主题背景的影响。(而样式恰好相反,它只对被设置的 View 起作用)
<!-- AndroidManifest.xml -->
<application …
android:theme="@style/Theme.Plaid">
<activity …
android:theme="@style/Theme.Plaid.About"/>
<!-- layout/foo.xml -->
<ConstraintLayout …
android:theme="@style/Theme.Plaid.Foo">
@ 和 ? 和 @android 和 @attr/ 和 ?android:attr/
@
:引用自定义的资源
<string name="app_name">hello</string>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name" />
?
:引用当前主题的资源
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:textColor="?colorPrimary"
android:textSize="24sp" />
@android
:引用Android内置的系统资源
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@android:mipmap/sym_def_app_icon" />
?attr/
等价于?
<resources>
<attr name="nameColor" format="color" />
</resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="nameColor">#a2a3e2</item>
</style>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:textColor="?nameColor"
android:textSize="24sp" />
?android:attr/
等价于?android
Theme常见写法
普通写法
@android:style/Theme.Holo.Light
4.0以后写法
@android:style/Theme.Material.xxx
5.0以后写法
Theme.AppCompat.Light.DarkActionBar
常见主题样式设置
<!--应用的主要颜色-->
<item name="colorPrimary">#ff0000</item>
<!--应用的次要颜色-->
<item name="colorPrimaryDark">#00ff00</item>
<!--默认选中颜色-->
<item name="colorAccent">@color/colorAccent</item>
<!--状态栏颜色-->
<item name="android:statusBarColor">#00000000</item>
<!-- 状态栏透明化 -->
<item name="android:windowTranslucentStatus">true</item>
<!-- 状态栏文字颜色,API23可用-->
<item name="android:windowLightStatusBar">true</item>
<!-- 全屏显示,隐藏状态栏、导航栏、底部导航栏 -->
<item name="android:windowFullscreen">true</item>
<!-- 隐藏Title -->
<item name="windowNoTitle">true</item>
<!-- 底部虚拟导航栏颜色 -->
<item name="android:navigationBarColor">#E91E63</item>
<!-- 让底部导航栏变半透明灰色,覆盖在Activity之上(默认false,activity会居于底部导航栏顶部),如果设为true,navigationBarColor 失效 -->
<item name="android:windowTranslucentNavigation">true</item>
<!--背景颜色-->
<item name="android:background">#a2a3e2</item>
<!--背景图片-->
<item name="android:windowBackground">@drawable/ic_launcher_background</item>
控件相关
<!-- button 文字是否全部大写,系统默认打开 -->
<item name="android:textAllCaps">false</item>
<!-- 默认 Button,TextView的文字颜色 -->
<item name="android:textColor">#B0C4DE</item>
<!-- 默认 EditView 输入框字体的颜色 -->
<item name="android:editTextColor">#E6E6FA</item>
<!-- RadioButton checkbox等控件的文字 -->
<item name="android:textColorPrimaryDisableOnly">#1C71A9</item>
<!-- 应用的主要文字颜色,actionBar的标题文字默认使用该颜色 -->
<item name="android:textColorPrimary">#FFFFFF</item>
<!-- 辅助的文字颜色,一般比textColorPrimary的颜色弱一点,用于一些弱化的表示 -->
<item name="android:textColorSecondary">#C1C1C1</item>
<!-- 控件选中时的颜色,默认使用colorAccent -->
<item name="android:colorControlActivated">#FF7F50</item>
<!-- 控件按压时的色调-->
<item name="android:colorControlHighlight">#FF00FF</item>
<!-- CheckBox,RadioButton,SwitchCompat等默认状态的颜色 -->
<item name="android:colorControlNormal">#FFD700</item>
<!-- 默认按钮的背景颜色 -->
<item name="android:colorButtonNormal">#1C71A9</item>
<!--屏幕方向-->
<item name="android:screenOrientation">landscape</item>