`
oyeal
  • 浏览: 82316 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
社区版块
存档分类
最新评论

Android的风格与主题

阅读更多
Android风格(styles)和主题(themes)文件,是影响到整个应用界面美观的因素之一。Styles和Themes都是资源,存放在res/values文件夹下。
Style:是一个包含一种或者多种格式属性的集合,你可以将其应用在布局文件中的单一组件中。比如,我们可以为一个TextView组件自定义一种风格,在这个风格中定义文本的字体大小和颜色等等;也可以使用系统自带的风格。
Theme:是一个包含一种或者多种格式化属性的集合,你可以将其应用在一个或者多个Activity中。比如,我们可以自定义一个Theme,指定窗口框架颜色和面板的前景色和背景色,并为菜单定义可文字的大小和颜色属性,这样就可以将这个Theme应用在我们程序中所有的Activity里。
风格
(1) 自定义style时,在res/value目录下新建一个xml文件(文件名可以随便取),最好取别人一看就知道是做什么的;
(2) 添加<resources></resources>标签;
(3) 在<resources></resources>标签里面添加<style>元素,注意它的名字属性是唯一的;
(4) 在<style>里面定义你想要的风格属性,这些属性可以在类R.attr下找到,每一种属性都需要放在<item>标签下,每一种属性对应一个<item>标签,在标签内部定义该属性的值。
举个例子(styles.xml):
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="info_label">
        <item name="android:layout_height">wrap_content</item>
        <item name="android:layout_width">wrap_content</item>
        <item name="android:textAppearance">@style/TextAppearance.info_label</item>
        <item name="android:paddingRight">4dip</item>
</style>
<style name="TextAppearance.info_label">
     <item name="android:textSize">14sp</item>
     <item name="android:textStyle">bold</item>
</style>
<style
name="mytextstyle" parent="android:TextAppearance.Large">
<item name="android:textColor">#FFFFFF00</item>
<item name="android:textStyle">bold</item>
</style>
</resources>
上面的样式可以在单个组件TextView中应用如下:
<TextView style="@style/info_label"
      android:text="@string/oldPinLabel"/>
注意:我们用@符号和?符号来引用资源。地址符@表明我们引用的资源是其它地方定义过的(也许在这个项目中或者在Android框架中)。问号符?表明我们引用的资源的值在当前加载的主题中。这通过以名字引用特定的来完成(比如,panelTextColor使用了分配给panelForegroundColor的相同颜色)。这种技巧只能用在XML资源当中。
主题
主题在定义和引用方式上和风格的定义和引用是一样的,唯一不同的是它们被引用的地方不同。在使用上,主题可以在AndroidManifest.xml文件中的<application>和<activity>标签下使用,还可以通过代码在程序中使用。
在styles.xml文件中定义主题如下:
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<style name="myTheme" >
<item name="android:windowBackground">@drawable/transparent_backgroud</item>
<item name="android:windowNoTitle">true</item>
<item name=”android:textSize”>14sp</item>
<item name="android:windowFullscreen">true</item>
</style>
</resources>
上面代码中定义主题myTheme ,设置窗口背景为透明,无标题全屏,在AndroidManifest.xml中,应用于某个Activity时可以进行如下设置:
<activity android:theme="@style/myTheme">
若是应用到整个应用中的所有Activity的话,就要进行如下设置:
<application android:theme="@style/myTheme ">
也可以在程序中使用setTheme()方法来设定主题,但是要注意setTheme()一定要在setContentView()之前调用。否则设定的主题无法表现出来,可以这样使用:
setTheme(R.style.myTheme);
setContentView(R.layout.main);
之所以这样做,是因为主题是不能动态改变的,系统在绘制程序界面的开始就应该先获得主题的信息,才能绘制,而一旦绘制了,就不能再做改变。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics