Android样式和主题

Style 样式

1、Style样式可以为View或者窗口指定统一的外观和格式。比如可以指定:宽高尺寸、字体颜色、字号、背景颜色等属性。

2、方式:style可以通过在xml资源文件中进行定义,然后在布局文件或者代码中进行引用。

3、定义样式:在res/values/目录中创建styles.xml文件,在该xml文件中实现style的定义。

<?xml version="1.0" encodeing="utf-8"?>
<resource>
  <style name="CustomFont" parent="@android:style/TextAppearance.Medium">
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textColor">#0f0f0f</item>
  </style>
</resource>

4、Style样式是可以继承的,通过style标签中的parent属性指定新定义的样式所继承的样式。parent继承的是系统的一些style样式。继承是可选的,可以选择继承,也可以选择不继承。

5、自定义的Style样式继承:可以通过”.“符号进行自定义的属性继承,在继承的基础上,进行属性的自定义修改。

<?xml version="1.0" encodeing="utf-8"?>
<resouce>
  <style name="CodeFont.Red">
    <item name="android:textColor">#FF0000</item>
  </style>
</resouce>

6、设计style样式的目的:在复杂多样式的控件使用和项目应用中,保持统一的格式和展现效果,同时降低维护成本。

7、样式的使用:

  • 单个控件使用样式:在布局文件中,使用控件的地方,添加style属性。
  • 对Activity窗口或者应用使用样式:在AndroidMainfest.xml文件中为<activity>或者<application>元素添加android:theme属性。

1、View控件使用Style样式

在使用控件的xml布局文件中,引用样式名称。例如

<TextView 
          style="@style/CodeFont"
          android:text="Hello Wrold"/>

2、对Activity或者应用使用Style

Activity或者整个应用使用Style时,成为之主题:Theme。

使用时需要在AndroidMainfest.xml文件中进行编辑,添加带有样式名称的android:theme属性。例如

2.1 application应用级别的主题

<application android:theme="@style/CustomTheme">
  ...
</application>

2.2 Activity级别的主题

对应用中的某一个Activity使用style主题,修改AndroidMainfest.xml文件中的<activity>标签中的android:theme属性即可。

<activity android:theme="@android:style/Theme.Dialog">
  ...
</activity>

3、Theme的变化和版本区别

3.1 普通的Theme主题

最常见的普通的Theme主题是:

@android:style/Theme.xxx

3.2 Materail Design主题 API:21

material:材料,原料,材质。Android 5.0系统开始,推广的一种新的设计风格,在android流行起Materail Design风格以后,android系统中的主题也提供了相应的支持:

@android:style/Theme.Material.xxx

3.3 v7包中的AppCompat主题

在5.0以后,android推出了appcompat-v7支持包,主要是有一些新控件,在该支持包中,有相应的主题支持:

@style/Theme.Appcompat.xxx

目前,所有的Activity均继承自AppCompatActivity,使用的主题也大多是AppCompat的主题。

4、Android界面的组成

4.1 状态栏 StatusBar

手机屏幕的最顶端显示信号,时间,wifi等信息,android系统当中称之为StatusBar。

4.2 标题栏 TitleBar

标题栏位于状态栏的下方,正常情况下标题栏的布局和主题样式都是使用系统定义好的。

4.3 操作栏 ActionBar

ActionBar又称之为操作栏,操作栏是Android 系统在3.0以后的SDK中引入的,操作栏的作用是取代标题栏,操作栏和标题栏一样紧挨在状态栏的下方。

注意:ActionBar是Android 3.0及以上的SDK才引入的,需要设置minSDKVersion = "11",即最小sdk需要大于11版本。另外,支持ActionBar的主题是Theme.Holo及其子主题,包含ActionBar。

4.4 工具栏 ToolBar

在2015年Google的IO开发者大会上,发布了关于Material Design风格的控件,其中ToolBar控件替代了ActionBar控件。ActionBar的碎片化问题比较严重,因此ToolBar替换了ActionBar。

ToolBar在显示上与ActionBar并没有什么区别,不同之处在于使用Toolbar可以修改状态栏的颜色。

4.5 导航栏 NavigationBar

Android系统界面中的底部导航栏,底部的虚拟按键。

 

5、系统提供的常用Style和主题

常见的一些系统提供的主题,举例如下:

  • 背景透明:@android:style/Theme.Translucent
  • Activity的Dialog主题:@android:style/Theme.Dialog
  • 不显示标题栏:@android:style/Theme.NoTitleBar
  • 背景白色:@android:style/Theme.Light
  • Holo背景白色:@android:style/Theme.Holo.Light,适用于弹出的对话框的背景是黑色的,需要设置成该主题属性。

除此之外,还可以两个或者多个相互组合,比如:

  • 无标题栏,并全屏:@android:style/Theme.NoTitleBar.Fullscreen
  • 白色背景且无标题栏:@android:style/Theme.Light.NoTitleBar
  • 透明背景且无标题栏:@android:style/Theme.Translucent.NoTitleBar

除此之外,还有很多,可以根据需要进行选取尝试和设置。

4、style中常见的item的属性

4.1 window的item属性

  • android:windowNoTitle:是否有标题栏,可选值为true/false
  • android:windowFullScreen:是否为全屏,可选值为true/false
  • android:windowIsTranslucent:window是否为全屏,可选值为true/false
  • android:windowBackground:window的背景颜色