MyException - 我的异常网
当前位置:我的异常网» Android » Android之正题与样式

Android之正题与样式

www.MyException.Cn  网友分享于:2013-07-04  浏览:29次
Android之主题与样式

Android 风格和主题

    Android xml风格和主题文件的编写,是涉及到整个程序界面美观的因素之一。 当设计应用程序时,你可以用风格和主题来统一格式化各种屏幕和UI元素。较好的应用风格和主题,可以实现美观而统一的界面,和web中的CSS一样,Android也可以为界面定义全局、公用的Style。

 

Styles和Themes都是资源文件位于res/values,当然,可以用Android提供的一些默认的风格和主题资源,也可以自定义自己的主题和风格资源。

Styles:
风格是一个包含一种或者多种格式化属性的集合,可以将其作为一个单位用在布局XML单个元素当中。 比如,可以定义一种风格来定义文本的文字大小和颜色,然后将其应用于视图 元素的一个特定实例。

Theme:
主题是一个包含一种或者多种格式化属性的集合,可以将其作为一个单位用在应用程序所有的活动当中或者某个活动当中。比如,可以定义一个主题,它为window frame和panel 的前景和背景设置了特定的颜色, 并为菜单定义文字的大小和颜色属性,然后将这个Theme应用到应用程序的Activity中。

 

 

Style和Theme的XML文件结构:
对每一个Styles和Themes,有一个<resources>根节点,给<style>元素增加一个全局唯一 的名字,也可以选择增加一 个父类属性。在后边我们可以用这个名字来应用风格,而 父类属性标识了当前风格是继承 于哪个风格。在<style>元素内部,申明一个或者多个<item>,每一个<item>定义了一个名字属性,并且在元素内部定义了这个风格的值。

新建自定义的风格和主题 :
1. 在res/values 目录下新建一个名叫style.xml的文件。
2. 对每一个风格和主题,给<style>元素增加一个全局唯一的名字,和一个可选的父类属性。在后边我们可以名字来应用风格,而父类属性标识了当前风格是继承于哪个风格。

3. 在<style>元素内部,申明一个或者多个<item>,每一个<item>定义了一个名字属性,并且在元素内部定义了这个风格的值。

4. 然后可以在其他XML资源,manifest或应用程序代码中引用这些自定义资源。

风格Styles(SDK提供的Style的例子) :

<?xml version="1.0" encoding="utf-8"?> <resources> <style name="SpecialText" parent="@style/Text"> <item name="android:textSize">18sp</item> <item name="android:textColor">#008</item> </style> </resources>

 如上所示,你可以用<item>元素来为你的风格定义一组格式化的值。在Item当中的name属性可以 是一个字符串,一个16进制数所表示的颜色或者任何其他资源的引用。

注意:在<style>元素中的父类属性。这个属性让你可以能够定义一个资源,当前风格可以从这个资源当中继承到值。你可以从任何包含这个资源当中继承此风格。通常上,你的资源应该一直直接或者间接地继承Android的标准风格资源。这样的话,你就只需要定义你想改变的值。
在这个例子当中的EditText元素,演示了如何引用一个XML布局文件当中定义的风格:

<EditText id="@+id/text1" style="@style/SpecialText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Hello, World!" />

 

现在这个EditText部件所表现出来的风格将是我们在上边的XML文件中所定义的那样。

另:转载一个自定义实例

1.在res/values 目录下新建一个名叫style.xml的文件。
2.在style.xml定义内容如下:

<?xml version=”1.0″ encoding=”utf-8″?> <resources> <style name=”DavidStyleText1″> <item name=”android:textSize”>18sp</item> <item name=”android:textColor”>#EC9237</item> </style> <style name=”DavidStyleText2″> <item name=”android:textSize”>14sp</item> <item name=”android:textColor”>#FF7F7C</item> <item name=”android:fromAlpha”>0.0</item> <item name=”android:toAlpha”>0.0</item> </style> </resources>

 上面样式的定义,从字面意思就可以了解其功能了,下面看看如何应用它吧:

<!– 应用样式1的TextView –> <TextView style="@style/DavidStyleText1" android:layout_width=”fill_parent” android:layout_height=”wrap_content” android:gravity=”center_vertical|center_horizontal” android:text=”moandroid”/> <!– 应用样式2的TextView –> <TextView style="@style/DavidStyleText2″ android:layout_width=”fill_parent” android:layout_height=”wrap_content” android:gravity=”center_vertical|center_horizontal” android:text=”www.moandroid.com” android:autoLink=”all”/>

 

现在这个EditText组件的所表现出来的风格就为我们在上边的XML文件中所定义的那样,如下:

Android <wbr><wbr>Styles <wbr><wbr>& <wbr><wbr>Themes(上)

看了新的界面是不是感觉漂亮多了,这也就是Styles的魅力吧。需要补充说明的是:单击超链接,还可以打开网页如下:

Android <wbr><wbr>Styles <wbr><wbr>& <wbr><wbr>Themes(上)

这是如何实现的了?TextView.setTextView不支持HTML TAG的输出,所以即便写成这样:
mTextView01.setText(”<a href=\”http://www.moandroid.com/\”>mo-android|享受Android带给我们的新体验</a>”);实际输出时,也就是纯文本而已,并不会作HTML TAG的转换。但若撇开HTML TAG之外(如“<”开头的标记),在TextView里加上了android:autoLink=”all”,那么正文中若有网址(http://),是可以被显示的。

Theme依然在<style>元素里边申明,也是以同样的方式引用。不同的是通过在Android Manifest中定义的<application>和<activity>元素将主题添加到整个程序或者某个 Activity,但是主题是不能应用在某一个单独的View里。

主题Themes :

就像风格一样,主题依然在<style>元素里边申明,也是以同样的方式引用。不同的是你通过在AndroidManifest中定义的<application>和<activity>元素将主题添加到整个程序或者活动中——主题并不能应用于个别视图。

<?xml version="1.0" encoding="utf-8"?> <resources> <style name="CustomTheme"> <item name="android:windowNoTitle">true</item> <item name="windowFrame">@drawable/screen_frame</item> <item name="windowBackground">@drawable/screen_background_white</item> <item name="panelForegroundColor">#FF000000</item> <item name="panelBackgroundColor">#FFFFFFFF</item> <item name="panelTextColor">?panelForegroundColor</item> <item name="panelTextSize">14</item> <item name="menuItemTextColor">?panelTextColor</item> <item name="menuItemTextSize">?panelTextSize</item> </style> </resources>

 

注意:我们用了@符号和?符号来引用资源。地址符@表明我们引用的资源是其它地方定义过的(也许在这个项目中或者在Android框架中)。问号符?表明我们引用的资源的值在当前加载的主题中。这通过以名字引用特定的<item>来完成(比如,panelTextColor使用了分配给panelForegroundColor的相同颜色)。这种技巧只能用在XML资源当中。

在manifest中设置主题Set the theme in the manifest : 
为了给应用程序所有的活动设置主题,你可以打开清单文件AndroidManifest.xml,编辑<application>标签,让其包含android:theme属性,值是一个主题的名字,如下:

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

Android中提供了几种内置的资源,有好几种主题可以用于切换而不用自己写。如果你只是想让你程序当中的某个Activity拥有这个主题,那么你可以修改<activity>标签。就像Android提供的其他内置资源一样,有好几种主题你可以切换而不用自己写。比如你可以用对话框主题来让你的活动看起来像一个对话框。在manifest中,像下面这样引用一个Android主题:
   <activity android:theme="@android:style/Theme.Dialog">

如果你喜欢一个主题,但是想做一些轻微的调整,你只需要将这个主题添加为父主题。比如,我们将修改Theme.Dialog主题。为此,创建一个风格以Theme.Dialog为父主题:
    <style name="CustomDialogTheme" parent="@android:style/Theme.Dialog">
就这样,我们已经继承了Android对话框主题,因此我们可以按照自己的意愿来调整主题。这样,对于这个对话框主题中每个我们想要改变的item,我们可以在这里重新定义它的值然后在Android Manifest 文件中使用CustomDialogTheme而不是Theme.Dialog。   
在程序当中设置主题Set the theme from the application : 
如果需要的话,你还可以以编程的方式来给一个活动加载主题。为此,要使用setTheme()方法。

注意:这样做,你应该在初始化任何上下文中的视图之前设置主题。比如,在用setContentView(View)或者inflate(int, ViewGroup)方法前。这确保系统将当前主题应用在你所有的用户界面屏幕上。
  protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   ...
   setTheme(android.R.style.Theme_Light);
   setContentView(R.layout.linear_layout_3);
  }
如果你打算在程序代码中来加载主界面的主题,那么需要注意这个主题将不能应用于任何系统用来启动这个活动的动画,这些动画将在应用程序启动前发生。在大多数情况下,如果你想将主题应用到你的主界面,在XML中定义是一个更好的办法。
  

了解关于自定义风格和主题以及如何在应用程序中引用它们的详细信息,参见可用资源类型:风格和主题Available Resource Types: Style and Themes

了解关于缺省可用的主题和风格的信息,参见R.style

另:在转载一个列子定义Theme的一个例子

<?xml version=”1.0″ encoding=”UTF-8″?> <resources> <style name=”NewTheme” parent=”android:Theme.Black”> <item name=”android:windowNoTitle”>true</item> <item name=”android:textSize”>14sp</item> <item name=”android:textColor”>#FFFF0000</item> </style> </resources>

 

  • @ 表明我们应用的资源是前边定义过的(或者在前一个项目中或者在Android 框架中)。
  • ?表明我们引用的资源的值在当前的主题当中定义过。

这些技巧只能用在XML资源当中

 

这里需要注意的是,对于theme资源的引用,资源ID不是文件名(theme.xml),而是资源名(NewTheme)。运行后的界面显示如下:

 Android <wbr><wbr>Styles <wbr><wbr>& <wbr><wbr>Themes(下)

在AndroidManifest.xml中应用Theme

  • 为了在当前所有的Activity当中使用Theme,可以打开AndroidManifest.xml 文件,编辑<application>标签,让其包含android:theme属性,值是一个主题的名字,
  • 例如:<application android:theme=”@style/NewTheme”>
  • 如果只是想让程序当中的某个Activity拥有这个Theme,那么可以修改<activity>标签。Android中提供了几种内置的资源,有好几种Theme你可以切换而不用自己写。比如可以用对话框Theme来让你的Activity看起来像一个对话框。在manifest中定义,
  • 例如:<activity android:theme=”@android:style/Theme.Dialog”>
  • 如果喜欢一个Theme,但是想做一些轻微的改变,只需要将这个Theme添加为parent。Android SDK为我们提供了很多现成的Theme,部分列举如下:
  • Android-Theme
  •  比如:我们修改Theme.Dialog Theme,继承ThemeDialog来生成一个新的Theme。
    <style parent=”@android:style/Theme.Dialog”>
    继承了Theme.Dialog后,我们可以按照我们的要求来调整Theme。我们可以修改在Theme.Dialog中定义的每个item元素的值,然后我们在Android Manifest 文件中使用NewDialogTheme而不是 Theme.Dialog。 

 感觉经典的Android之主题与样式文章:

1:http://blog.csdn.net/woshishushangdezhu/article/details/4602597

2:http://blog.csdn.net/woshishushangdezhu/article/details/4602656

3:http://www.eoeandroid.com/thread-1277-1-1.html

4:http://blog.csdn.net/woshishushangdezhu/article/details/4602562

 

 

 

文章评论

Java程序员必看电影
Java程序员必看电影
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
程序员的鄙视链
程序员的鄙视链
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
一个程序员的时间管理
一个程序员的时间管理
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
编程语言是女人
编程语言是女人
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
10个调试和排错的小建议
10个调试和排错的小建议
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
每天工作4小时的程序员
每天工作4小时的程序员
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
鲜为人知的编程真相
鲜为人知的编程真相
总结2014中国互联网十大段子
总结2014中国互联网十大段子
程序员和编码员之间的区别
程序员和编码员之间的区别
我是如何打败拖延症的
我是如何打败拖延症的
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
旅行,写作,编程
旅行,写作,编程
那些争议最大的编程观点
那些争议最大的编程观点
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
程序员都该阅读的书
程序员都该阅读的书
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
为什么程序员都是夜猫子
为什么程序员都是夜猫子
我的丈夫是个程序员
我的丈夫是个程序员
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序员应该关注的一些事儿
程序员应该关注的一些事儿
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
程序员必看的十大电影
程序员必看的十大电影
老程序员的下场
老程序员的下场
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有