Android应用开发中的风格和主题(style,themes)

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

复制代码
<!-- 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>
复制代码

各种样式具体使用可看:http://henzil.easymorse.com/?p=364  android Theme使用总结      

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

style和theme都是资源。你可以用android提供的一些默认的style和theme资源,你也可以自定义你自己的style和theme资源。
如何新建自定义的style和theme:
1.在res/values 目录下新建一个名叫style.xml的文件。增加一个<resources>根节点。
2.对每一个style和theme,给<style>element增加一个全局唯一的名字,也可以选择增加一个父类属性。在后边我们可以用这个名字来应用风格,而父类   属性标识了当前风格是继承于哪个风格。
3.在<style>元素内部,申明一个或者多个<item>,每一个<item>定义了一个名字属性,并且在元素内部定义了这个风格的值。
4.你可以应用在其他XML定义的资源。
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当中的名字的属性可以是一个字符串,一个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文件中所定义的那样。

Theme:

就像style一样,主题依然在<style>元素里边申明,也是以同样的方式引用。
不同的是你通过在Android Manifest中定义的<application>和<activity>元素将主题添加到整个程序或者某个 Activity,但是主题是不能应用在某一个单独的View里。
下边是申明主题的一个例子:
<?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资源当中。
设置主题(theme):

1.在manifest当中设置主题

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

2.在程序当中设置主题

如果需要的话,你可 以在Activity当中通过使用方法setTheme()来加载一个主题。注意,如果你这么做的话,你应该初始化任何View之前设置主题。比如,在调 用setContentView(View) 和inflate(int, ViewGroup)方法前。这保证系统将当前主题应用在所有的UI界面。例子如下:
 protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  ...  setTheme(android.R.style.Theme_Light);  setContentView(R.layout.linear_layout_3); }
如果你打算在程序代码中来加载主界面的主题,那么需要注意主题当中不能包括任何系统启动这个Activity所使用的动画,这些动画将在程序启动前显示。在很多情况下,如果你想将主题应用到你的主界面,在XML中定义似乎是一个更好的办法。

===============================================================================

案例可看:

1.http://wang-peng1.iteye.com/blog/561292 android之buttonBar的设计--style的引用

2.http://mycoding.iteye.com/blog/966726 Android 用style简化layout布局文件

http://blog.csdn.net/fzh0803/article/details/6279995

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264761.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows上安装mysql5.7.24

平时自己做测试的时候&#xff0c;自己安装一个mysql还是很有必要的&#xff0c;网上教程很多&#xff0c;但是自己操作过程中还是遇到了一些问题&#xff0c;这里记录一下安装过程。 一、下载mysql https://downloads.mysql.com/archives/community/ 我使用的是5.7.24的解压版…

gb酱油和gbt酱油哪个好_都是酱油,生抽好还是味极鲜好?老板:两者差别很大,别买错了...

导读&#xff1a;都是酱油&#xff0c;生抽好还是味极鲜好&#xff1f;老板&#xff1a;两者差别很大&#xff0c;别买错了一道美食的完成不只是依赖掌厨的高超技艺&#xff0c;还与炒制的锅具、所用的调料等有关。其中最重要的就是调料&#xff0c;有了调料的辅助&#xff0c;…

数字万用表的使用

参考&#xff1a;连3岁小孩子都能看懂的万用表使用方法 地址&#xff1a;https://www.bilibili.com/video/BV1Gx411z7x2?p1&vd_sourcecc0e43b449de7e8663ca1f89dd5fea7d 目录万用表外观测量电阻测量通断/二极管测量电容测量温度测量电流测量电压测量三极管万用表外观 测量…

在GridView开头插入自动编号的方法

网上看了很多方法&#xff0c;发现都是照抄别人&#xff0c;而且&#xff0c;都是把第一列替换掉了&#xff0c;往往不是我们的理想结果。经过本人的实践&#xff0c;下面方法觉得更好用一些。就是不知道数据量过大时&#xff0c;效率怎么样&#xff0c;不过既然能用&#xff0…

Zookeeper:fsync超时导致实例异常

一、问题描述 2019-02-19 08:44左右&#xff0c;实时计算服务重启&#xff0c;报错显示找不到zk集群的leader节点&#xff0c;同时ZooKeeper集群有告警显示连接超时&#xff1a; 指标[连接耗时(ms)18221]符合告警规则[连接耗时(ms)>3000] 二、排查过程 查看当前集群状态&…

断言(assert)的用法

参考&#xff1a;https://www.runoob.com/w3cnote/c-assert.html 目录作用总结与注意事项Demo作用 assert 是个宏&#xff0c;并且作用并非"报错"。 assert() 的用法像是一种"契约式编程"&#xff0c;程序满足我的假设条件&#xff0c;才能正常良好的运作…

马云语录,非常值得一看(转)

来源:计算机网1999至今 在杭州设立研究开发中心&#xff0c;以香港为总部&#xff0c;创办阿里巴巴网站(Alibaba.com) 孙正义跟我有同一个观点&#xff0c;一个方案是一流的Idea加三流的实施&#xff1b;另外一个方案&#xff0c;一流的实施&#xff0c;三流的Idea&#xff0c;…

centos7 docker安装和使用_入门教程

centos7 docker安装和使用_入门教程 原文:centos7 docker安装和使用_入门教程说明&#xff1a;本文也是参考互联网上的文章写的&#xff0c;感谢相关作者的贡献。 操作系统 64位CentOS Linux release 7.2.1511 (Core) 配置好IP&#xff1a;192.168.1.160 修改yum源 目的是提升对…

C语言中字符串和字符数组的区别

参考&#xff1a;C语言中字符串和字符数组的区别 参考&#xff1a;字符数组和字符串的区别&#xff0c;C语言字符数组和字符串区别详解 这里写目录标题区别代码分析一代码分析二总结区别 &#xff08;1&#xff09;C语言中&#xff0c;没有字符串类型但可以用字符数组模拟字符…

spring in action 读书笔记

IOC 1.几个主要使用的application context. ClassPathXmlApplicationContext 从ClassPath路径加载 FileSystemXmlApplicationContext 从文件系统路径加载XmlWebApplicationContext 配置文件黑夜在/WEB-INF/applicationContext.xml&#xff0c;也可以使用setConfigLocation…

C语言可变参数

参考&#xff1a;https://blog.csdn.net/u013171226/article/details/121445507 目录什么是可变参数可变参数列表构成实现原理(va_list系列变参宏实现变参函数)代码示例函数通过固定参数指定可变参数个数&#xff0c;打印所有变参值函数定义一个结束标记(-1)&#xff0c;调用时…

940mx黑苹果驱动_超详细黑苹果安装图文教程送EFI配置合集及系统

一、准备工作所有工具在&#xff1a;黑苹果资源站可以下载到 网站地址&#xff1a;https://jnzr.ewys.net/1、两张16g的u盘 其中一张安装pe系统 (老毛桃等)这里自行安装2、电脑(废话)这里以小米pro笔记本做教程 其余的本本大同小异3、工具包及镜像以及EFI合集(链接及下载地址在…

python时间减法_干!一张图整理了 Python 所有内置异常

在编写程序时&#xff0c;可能会经常报出一些异常&#xff0c;很大一方面原因是自己的疏忽大意导致程序给出错误信息&#xff0c;另一方面是因为有些异常是程序运行时不可避免的&#xff0c;比如在爬虫时可能有几个网页的结构不一致&#xff0c;这时两种结构的网页用同一套代码…

笔记本电脑频繁自动重启_笔记本电脑自动重启是什么原因

使用电脑很长一段时间就会出现各种各样的问题&#xff0c;但不管出了什么问题&#xff0c;只要电脑能打开有一种方法可以解决的问题&#xff0c;但有时电脑会莫名其妙的重启&#xff0c;电脑爱好者我们有点不知所措。尤其是办公室人员做了很长时间的工作&#xff0c;想要面对以…

新快现类似产品_小米全新折叠屏产品曝光,预计今年还有更多折叠屏产品亮相...

虽然目前小米并未正式推出旗下的折叠屏设备&#xff0c;但这并不意味着小米放弃了这方面的研究。相反&#xff0c;近日的一些爆料显示了小米在折叠屏设备领域有着多种不同的设想和思路。上个月的相关爆料曾提到过&#xff0c;小米2021年有望推出外折型、内折型和翻盖式三种不同…

全虚拟化和半虚拟化的区别 cpu的ring0~ring3又是什么概念?

ring0是指CPU的运行级别&#xff0c;ring0是最高级别&#xff0c;ring1次之&#xff0c;ring2更次之…… 拿Linuxx86来说&#xff0c; 操作系统&#xff08;内核&#xff09;的代码运行在最高运行级别ring0上&#xff0c;可以使用特权指令&#xff0c;控制中断、修改页表、访问…

dual mysql 获取序列_MySQL JDBC客户端反序列化漏洞

标题: MySQL JDBC客户端反序列化漏洞☆ 背景介绍☆ 学习思路☆ 搭建测试环境☆ 恶意MySQL插件 1) 获取MySQL 5.7.28源码 2) 在rewrite_example基础上修改出evilreplace☆ 测试rewriter插件 1) 安装rewriter.so 2) 在服务端替换SQL查询语句 3) 卸载rewriter.so …

kali linux之edb--CrossFire缓冲区溢出

漏洞的罪恶根源------变量&#xff0c;数据与代码边界不清&#xff0c;开发人员对用户输入没做过滤&#xff0c;或者过滤不严 如这个脚本&#xff0c;写什么&#xff0c;显示什么&#xff0c;但是加上&#xff1b;&#xff0c;|&#xff0c;&&&#xff0c;后面加上系统…

SQL连接查询深度探险

测试环境&#xff1a;Windows XP ProfessionMySQL 5.0.45Oracle 9iDB2 UDB 9.1测试的SQL脚本如下&#xff1a;此脚本适合MySQL、DB2&#xff0c;如果要在Oracle上执行&#xff0c;需要做个替换BIGINTINTEGER、VARCHARVARCHAR2。CREATETABLECUSTOMERS (ID BIGINT NOTNULL,NAME V…

自锁时间电路plc_1篇文章,4幅图,了解PLC接线和控制图就是这么简单

有网友留言说看不懂plc梯形图&#xff0c;不知道如何将电气控制原理图转化为plc接线图&#xff0c;今天就系统的来看一下plc的原理和接线&#xff0c;再转化为plc接线图&#xff0c;我们需要借助一个最简单的单向过载保护的自锁控制电路。来看一下电路元器件&#xff0c;FR热机…