Android 主题样式总结

主题和样式

主题和样式都使用<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>

猜你喜欢

转载自blog.csdn.net/qq_14876133/article/details/107407047
今日推荐