Android:风格和主题

风格和主题(Styles and Themes)

      

       风格就是用来指定view或者window的外貌和格式的一系列的属性的集合,包括高度,间隙,字体大小,颜色,背景颜色等。风格是通过XML资源定义,它跟知道layout的XML文件不同。

 

       Android 风格跟网页设计一样,允许将内容跟设计分离。

例如要设计下面这个TextView,XML layout 定义如下:

     <TextView

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:textColor="#00FF00"

    android:typeface="monospace"

    android:text="@string/hello" />

 

style 设计模式如下:

<TextView

        style="@style/CodeFont"

    android:text="@string/hello" />

 

所有跟风格相关的属性都从XML layout移到了了一个叫做CodeFont的style中,具体定义后面会介绍。

 

主题也是一种风格,不过它是被应用到整个的活动或者应用中,而不是应用到一个单独的view。当一个风格被应用为一个主题时,这个活动或者应用中的所有view 都会采用它所支持的style的所有属性。

 

定义一个风格

1.                  在APP的 /res/values/  目录下面建立一个XML文件,文件名随意取定,但是文件后缀名必须是.xml.例如style.xml

2.                   style.xml 文件的根节点必须是 <resources>

3.                   每个<style>元素对于一个风格,对于这个元素,它的name 属性是用来识别它的唯一标志

4.                   对于一个风格的每个属性,都需要添加一个<item>元素,<item>元素包含一个属性名和一个属性值

 

例子如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <stylename="CodeFont"parent="@android:style/TextAppearance.Medium">
        <itemname="android:layout_width">fill_parent</item>
        <itemname="android:layout_height">wrap_content</item>
        <itemname="android:textColor">#00FF00</item>
        <itemname="android:typeface">monospace</item>
        </style>

</resources>

 

<resources>元素的每个子元素在编译的时候就会转换成一个应用资源对象,然后通过它的name的值就能引用它了。

<style>元素的parent 属性是可选的。它通过资源ID指定了该style应该从其它style继承得到的属性,同时你也可以复写这些属性。

一个style,无论是用作主题还是风格,它们都是定义在XML文件中的。

 

继承

<style>元素的继承属性允许你的style继承来自其它style定义的属性(包括自己另外定义的或者系统本省提供的)。然后你只需要添加一些额外的属性即可。同时你也能复写继承得到的属性来改变它本身的值。例如继承自系统的style:

<style name="GreenText" parent="@android:style/TextAppearance">

        <item name="android:textColor">#00FF00</item>

</style>

 

如果你需要继承你自己的style,不一定非要parent属性。你只需要将你要继承的style名字作为新style的前缀,并用点隔开即可。例如继承自CodeFont 的style Red定义如下:

<style name="CodeFont.Red">

        <item name="android:textColor">#FF0000</item>

  </style>

引用方法:@style/CodeFont.Red.

这种通过前缀名和.的继承方式可以无限制的继承下去,例如:

<style name="CodeFont.Red.Big">

        <item name="android:textSize">30sp</item>

 </style>

 

注意:这种继承方式只能用于你自己定义的style.要想继承系统的style,必须使用parent属性。

 

风格的属性

 

既然已经知道如何定义一个风格,那么我们有必要了解下风格里面的<item>元素可以定义哪些属性。

对于一个view而言,要定义它的<item>属性,最好的办法就是去这个view的参考类中去找,这个参考类会列出所有支持的XML属性。这些属性以及它父类的属性都能够被定义在style 中。

例子:

<EditText
    android:inputType="number"
    ... />

You can instead create a style for the EditText element that includes this property:

<stylename="Numbers">
  <itemname="android:inputType">number</item>
  ...
</style>

So your XML for the layout can now implement this style:

<EditText
    style="@style/Numbers"
    ... />

这种工作看上行去更复杂,实际上当你有大量的属性要设置的时候,这种做法是很值得推荐的。

此外,在R.attr 中,你能够找到所有的style 属性。值得一提的是,如果你将一个style应用到一个view中,但是某些属性这个view不支持,就会直接忽视,将支持的应用起来。

对于某些属性不能被任何view支持,只能应用为主题。这些属性是应用到一个窗口的。而不是任何一个view.例如隐藏应用的标题,状态栏,改变窗口的背景颜色等(更多请看:R.attr 中 window.开头的属性)。

注意:<item>的格式:<item name="android:inputType">.

将风格和主题应用到UI

在R.style 类中有大量的style供你使用。为了更好的理解style.请参照这些style的源码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值