本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!

越来越多互联网企业都在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:

  1. <!-- Window attributes -->
  2. <item name="windowBackground">@android:drawable/screen_background_dark</item>
  3. <item name="windowFrame">@null</item>
  4. <item name="windowNoTitle">false</item>
  5. <item name="windowFullscreen">false</item>
  6. <item name="windowIsFloating">false</item>
  7. <item name="windowContentOverlay">@android:drawable/title_bar_shadow</item>
  8. <item name="windowTitleStyle">@android:style/WindowTitle</item>
  9. <item name="windowTitleSize">25dip</item>
  10. <item name="windowTitleBackgroundStyle">@android:style/WindowTitleBackground</item>
  11. <item name="android:windowAnimationStyle">@android:style/Animation.Activity</item>

<!-- Window attributes -->
<item name="windowBackground">@android:drawable/screen_background_dark</item>
<item name="windowFrame">@null</item>
<item name="windowNoTitle">false</item>
<item name="windowFullscreen">false</item>
<item name="windowIsFloating">false</item>
<item name="windowContentOverlay">@android:drawable/title_bar_shadow</item>
<item name="windowTitleStyle">@android:style/WindowTitle</item>
<item name="windowTitleSize">25dip</item>
<item name="windowTitleBackgroundStyle">@android:style/WindowTitleBackground</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Activity</item>

至于控件的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代码如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical" android:layout_width="fill_parent"
  4. android:layout_height="fill_parent">
  5. <TextView android:layout_width="fill_parent"
  6. android:layout_height="wrap_content" android:text="@string/hello"
  7. style="@style/TextView" />
  8. <EditText android:id="@+id/EditText01" android:layout_height="wrap_content"
  9. style="@style/EditText" android:layout_width="fill_parent"
  10. android:text="类似Button的EditText"></EditText>
  11. <EditText android:id="@+id/EditText02" android:layout_height="wrap_content"
  12. android:layout_width="fill_parent" android:text="普通的EditText"></EditText>
  13. <Button android:id="@+id/Button01" android:layout_height="wrap_content"
  14. style="@style/Button" android:layout_width="fill_parent" android:text="类似EditText的Button"></Button>
  15. </LinearLayout>

Android入门第十六篇之Style与Theme [转]的更多相关文章

  1. CTF---Web入门第十六题 天下武功唯快不破

    天下武功唯快不破分值:10 来源: 北邮天枢战队 难度:易 参与人数:10787人 Get Flag:2264人 答题人数:3373人 解题通过率:67% 看看响应头 格式:CTF{ } 解题链接: ...

  2. Spring入门第十六课

    接上一次讲课 先看代码: package logan.spring.study.annotation.repository; public interface UserRepository { voi ...

  3. 跟我学SpringCloud | 第十六篇:微服务利剑之APM平台(二)Pinpoint

    目录 SpringCloud系列教程 | 第十六篇:微服务利剑之APM平台(二)Pinpoint 1. Pinpoint概述 2. Pinpoint主要特性 3. Pinpoint优势 4. Pinp ...

  4. 解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译)

    解剖SQLSERVER 第十六篇 OrcaMDF RawDatabase --MDF文件的瑞士军刀(译) http://improve.dk/orcamdf-rawdatabase-a-swiss-a ...

  5. Python之路【第十六篇】:Django【基础篇】

    Python之路[第十六篇]:Django[基础篇]   Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了O ...

  6. Egret入门学习日记 --- 第十六篇(书中 6.10~7.3节 内容)

    第十六篇(书中 6.10~7.3节 内容) 昨天搞定了6.9节,今天就从6.10节开始. 其实这个蛮简单的. 这是程序员模式. 这是设计师模式. 至此,6.10节 完毕. 开始 6.11节. 有点没营 ...

  7. Python自动化 【第十六篇】:JavaScript作用域和Dom收尾

    本节内容: javascript作用域 DOM收尾 JavaScript作用域 JavaScript的作用域一直以来是前端开发中比较难以理解的知识点,对于JavaScript的作用域主要记住几句话,走 ...

  8. Struts2(十六篇)

    (一)Struts2框架概述 (二)Struts2配置文件 (三)Struts2的Action(简单讲解版) (四)Struts2的Action(深入讲解版) (五)Struts2处理结果管理 (六) ...

  9. Android入门第六篇之ListView (一)

    本文来自http://blog.csdn.net/hellogv/ ListView是一个经经常使用到的控件,ListView里面的每一个子项Item能够使一个字符串,也能够是一个组合控件.先说说Li ...

随机推荐

  1. SQL Server 空间监测

    数据库文件型: select * from sys.dm_db_file_space_usage;      go                                           ...

  2. linux查看系统的日志的一些实用操作

    last -a 把从何处登入系统的主机名称或ip地址,显示在最后一行. -d 指定记录文件.指定记录文件.将IP地址转换成主机名称. -f <记录文件> 指定记录文件. -n <显示 ...

  3. php date操作

    date(format,timestamp) d - 月中的天 (01-31) m - 当前月,以数字计 (01-12) Y - 当前的年(四位数) h 小时,12 小时格式,有前导零 01 到 12 ...

  4. 矩阵转置 O(1)空间

    题目:用O(1)的空间实现矩阵的转置 为了方便,使用一维数组来分析.所谓矩阵转置,行变列,列变行.在转置的过程中,有的元素位置是不变的:对于变化位置的元素,要求O(1)空间完成,那么这些位置的变化一定 ...

  5. android对应版本号

    android对应版本号 Platform Version API Level VERSION_CODE Notes Android 4.2 JELLY_BEAN_MR1 Platform Highl ...

  6. error LNK2019: 无法解析的外部符号

    前些日子电脑系统崩了,重装了了下,原有的项目环境得重新搭建,总是在链接时提示:error LNK2019: 无法解析的外部符号………… 起初以为是库没包含全,可发现不是 有想了下可能是库的包含次序有问 ...

  7. MySQL- 锁机制及MyISAM表锁

    锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许 多用户 共享的资源.如何保证数据并发访问的一致性.有效性是所 ...

  8. C语言奇思妙想:求1+2+…+n,要求不能使用乘除法、for、while、if、else、s witch、case 等关键字以及条件判断语句(A?B:C)

    来源:据说是某一年某个公司的面试题 题目:求1+2+…+n, 要求不能使用乘除法.for.while.if.else.s witch.case 等关键字以及条件判断语句(A?B:C) 分析:这题本来很 ...

  9. Android判断网络连接状态

    有的时候我们的应用可能需要判断当前设备是否联网 private void init() { /** 获得系统级联网管理员对象 */ ConnectivityManager manager = (Con ...

  10. iOS调用系统声音与振动

    如何调用系统声音?[iphone 调用系统铃声与震动功能] 首先要在工程里加入Audio Toolbox framework这个库,然后在需要调用的文件里#import <AudioToolbo ...