HardBirch

Android入门第十六篇之Style与Theme

时间:11-01-11 栏目:安卓入门与提高 作者:张飞不张,文采横飞 评论:46 点击: 16,869 次

       越来越多互联网企业都在Android平台上部署其客户端,为了提升用户体验,这些客户端都做得布局合理而且美观.......Android的Style设计就是提升用户体验的关键之一。Android上的Style分为了两个方面:

  1. Theme是针对窗体级别的,改变窗体样式;
  2. Style是针对窗体元素级别的,改变指定控件或者Layout的样式。

Android系统的themes.xml和style.xml(位于/base/core/res/res/values/)包含了很多系统定义好的style,建议在里面挑个合适的,然后再继承修改。以下属性是在Themes中比较常见的,源自Android系统本身的themes.xml:











至于控件的Style设计就范围大多了,看看Eclipse的Android控件属性编辑器[Properties]就大概知道有哪些条目,而Android内置的style.xml也只是定义每个控件的默认样式而已....不过控件的style不建议大改,耐看的style更能让用户长时间使用软件。另外,控件的Style在很多情况下都用到9.png,学习9.png就必须到/base/core/res/res/drawable-hdpi里面看看,里面有很多系统内置的9.png。

PS:为了研究Android的Style和Theme,强烈建议下载Android的base.git!

接下来看看本文程序的效果图:

本文程序的themes.xml代码如下,自定义了WindowTitle,:

<?xml version="1.0" encoding="UTF-8"?>
<resources>
<!--继承Android内置的Theme.Light,位于/base/core/res/res/values/themes.xml -->
<style name="Theme" parent="android:Theme.Light">
<item name="android:windowFullscreen">true</item>
<item name="android:windowTitleSize">60dip</item>
<item name="android:windowTitleStyle">@style/WindowTitle</item>
</style>

 <style name="WindowTitle" parent="android:WindowTitle">
<item name="android:singleLine">true</item>
<item name="android:shadowColor">#BB000000</item>
<item name="android:shadowRadius">2.75</item>
</style>
</resources>

要为Activity使用theme,要么使用代码 setTheme(R.style.Theme),要么在Application Manifest里面设置

本文程序的styles.xml代码如下,background默认使用的是9.png,xml定义在/base/core/res/res/drawable/之下:

 

<?xml version="1.0" encoding="UTF-8"?>
<resources>
<style name="TextView">
<item name="android:textSize">18sp</item>
<item name="android:textColor">#008</item>
<item name="android:shadowColor">@android:color/black</item>
<item name="android:shadowRadius">2.0</item>
</style>

 <style name="EditText">
<item name="android:shadowColor">@android:color/black</item>
<item name="android:shadowRadius">1.0</item>
<item name="android:background">@android:drawable/btn_default</item>
<item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
</style>

    <style name="Button">
<item name="android:background">@android:drawable/edit_text</item>
<item name="android:textAppearance">?android:attr/textAppearanceMedium</item>
</style>
</resources>

main.xml代码如下:
















声明: 本文由( 张飞不张,文采横飞 )原创编译,转载请保留链接: Android入门第十六篇之Style与Theme

Android入门第十六篇之Style与Theme:目前有46 条留言

  1. 46楼
    xuyan87101:

    [e03]

    2011-01-11 11:44 [回复]
  2. 45楼
    kf156:

    [e01]顶虫哥

    2011-01-11 11:44 [回复]
  3. 44楼
    dangerb:

    要顶,浅显易懂,一语惊醒梦中人

    2011-01-11 12:07 [回复]
  4. [e02]

    2011-01-11 13:27 [回复]
  5. 42楼
    hmc1985:

    [e01]

    2011-01-11 14:10 [回复]
  6. 41楼
    qwe285735942:

    .

    2011-01-11 16:16 [回复]
  7. 40楼
    v_JULY_v:

    博客写的挺棒的。不过,更多的,像是一种成功展示,对读者帮助可能并未如自己想象中的大。

    2011-01-11 16:23 [回复]
  8. 39楼
    hellogv:

    回复 v_JULY_v:
    是我做的笔记而已,方便我查询代码

    2011-01-11 17:34 [回复]
  9. 38楼
    Jeanth:

    [e01]

    2011-01-12 08:53 [回复]
  10. 37楼
    forlong401:

    CSDN这个精品推荐不知道是怎么定义的,
    满大街都转载的文章内容了,还盖那么个章。

    [e08]

    2011-01-12 13:10 [回复]
  11. 36楼
    listar24:

    虫哥。。很棒啊,,多写点哈。。我是烧饼,,费了半天口舌也不加我。。。[e08]

    2011-01-12 14:11 [回复]
  12. 35楼
    jackyu613:

    楼主写的不错。那么我这里就想问楼主一个比较难的问题:
    我们都知道一个Activity,如果其使用了Theme.Dialog主题(在AndroidManifest.xml中加入android:theme=&quot;@android:style/Theme.Dialog&quot;),就成为一个对话框样式的Activity。那么,在framework源代码中,比如说Activity.java中,我如何能通过编程的方式获知当前Activity实例使用的是哪种Theme。比方说,对于此例,如何能知道这个Activity是普通的Activity,还是对话框形式的Activity?

    2011-01-12 21:53 [回复]
  13. 34楼
    lookookok:

    不错[e01]

    2011-01-13 02:23 [回复]
  14. 33楼
    luofan1986:

    顶啊,最近也在想这方面的问题呢。来想楼主取经了。

    2011-01-13 10:39 [回复]
  15. 32楼
    chensylsl:

    呵呵 可以简单些么

    2011-01-13 12:06 [回复]
  16. 31楼
    hellogv:

    回复 jackyu613:
    试试用.getTheme(),取得Theme之后枚举

    2011-01-13 14:26 [回复]
  17. [e01]

    2011-01-13 17:19 [回复]
  18. 29楼
    xingyanjiang:

    学习了 顶顶顶

    2011-01-14 13:51 [回复]
  19. 28楼
    sghjxy716523:

    [e01]

    2011-01-14 17:02 [回复]
  20. 27楼
    androidlds:

    [e03]

    2011-03-22 15:12 [回复]
  21. 26楼
    android214:

    顶 学学[e01]

    2011-03-26 09:42 [回复]
  22. 25楼
    c8822882:

    谢谢楼主了[e01]

    2011-03-28 10:44 [回复]
  23. [e04][e03]

    2011-04-07 14:40 [回复]
  24. [e01]

    2011-04-07 14:40 [回复]
  25. 很深入,很牛逼

    2011-04-28 13:29 [回复]
  26. 21楼
    haizilin:

    好东西阿 必须顶 [e01]

    2011-06-01 10:34 [回复]
  27. 20楼
    oceanZhao:

    [e01]

    2011-06-03 17:36 [回复]
  28. 19楼
    a220315410:

    楼主,您好。遇到一个问题:
    <style name="WindowTitle" parent="android:WindowTitle">
    <item name="android:singleLine">true</item>
    <item name="android:shadowColor">#BB000000</item>
    <item name="android:shadowRadius">2.75</item>
    </style>
    这里出现了一个错误:
    No resource found that matches the given name 'android:WindowTitile'.
    想请教这是我哪里搞错了?

    2011-07-20 13:05 [回复]
  29. 18楼
    virusplayer:

    /base/core/res/res/values/
    那个目录,base在哪里,请说明白,谢谢!!

    2011-08-05 16:17 [回复]
  30. 17楼
    virusplayer:

    <style name="WindowTitle" parent="android:style/Theme.WindowTitle">

    2011-08-05 16:38 [回复]
  31. 16楼
    hellogv:

    [reply]virusplayer[/reply]
    你下载之后,解压缩自然就可以找到了

    2011-08-05 21:56 [回复]
  32. 15楼
    z1074971432:

    虫哥写的很好,赞一个
    顺便问下,在一个样式配置文件里设置style貌似不可以
    比如:
    <!– 点击时候 –>
    <item android:state_pressed="true"
    android:drawable="@drawable/bt_left"/>

    <item android:state_selected="true"
    android:drawable="@drawable/bt_left_select"/>
    配置按钮单击、获得焦点、或者平常的样式
    如果也能在这个文件里一起配置就OK

    2011-08-10 08:47 [回复]
  33. 14楼
    guiwang2008:

    楼主,<style parent="android:WindowTitle" name="CustomWindowTitle">
    <item name="android:shadowDx">0</item>
    <item name="android:shadowDy">0</item>
    <item name="android:shadowRadius">5</item>
    <item name="android:shadowColor">#1155CC</item>
    </style>
    报No resource found that matches the given name 'android:WindowTitile'.
    这个错误 ,与26楼是一样的错误,然后我按你给他的回复改了,但是还是No resource found that matches the given name 'android:style/Theme.WindowTitle'. 请问该如何改呀

    2011-08-11 14:56 [回复]
  34. 13楼
    kangliquan26:

    强烈建议下载Android的base.git!

    这是个什么? 不好意思, 新手 望能说明一下 谢谢了

    2011-08-11 15:35 [回复]
  35. 12楼
    hellogv:

    [reply]kangliquan26[/reply]
    ANDROID的源码要通过GIT下载,BASE是android源码的一部分

    2011-08-11 18:30 [回复]
  36. 11楼
    geek87:

    写的很好。

    2011-08-14 23:21 [回复]
  37. 10楼
    wwwchengzhuo:

    到哪里下载base

    2011-08-23 18:24 [回复]
  38. 9楼
    wangts:

    感谢楼主系统而全面的写出自己的所学、所思

    2011-09-20 22:48 [回复]
  39. i just come on ni

    2011-10-13 17:09 [回复]
  40. 7楼
    mojianqiu:

    为什么我修改不了titlebar的高度?
    用<item name="windowTitleSize">25dip</item>

    2011-11-02 10:54 [回复]
  41. 6楼
    ttzc121:

    Android系统的themes.xml和style.xml(位于/base/core/res/res/values/)在什么位置

    2011-11-21 09:16 [回复]
  42. 5楼
    hellogv:

    [reply]ttzc121[/reply]
    搜一下就知道了

    2011-11-21 13:28 [回复]
  43. <item name="windowTitleBackgroundStyle">@android:style/WindowTitleBackground</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Activity</item>
    请问这两个name属性里面一个有加android:一个没有加

    2012-01-13 11:19 [回复]
  44. 地板
    guhuaijian:

    感觉Style与Theme 的用途就跟html中的css一样,为了统一整体的风格以及样式的复用

    2012-02-13 17:47 [回复]
  45. 板凳
    feige1990:

    谢谢楼主分享…

    2012-03-10 22:40 [回复]
  46. 沙发
    sckalman:

    ActionBar 的高度有办法自定义么

    2012-08-22 19:43 [回复]

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐