Android开发:怎样定制界面风格
统一的用户界面是可以使得应用程序更友好。要做到用户界面的统一,我们就必须用到风格(style)和主题(theme)。OPhone系统提供了很多系统默认的风格和主题,但是很多情况下,这些不能满足我们的需要。例如我们不可能总是希望背景色是系统规定的,我们也不希望字体大小一成不变。当然我们可以在每个空间里面进行修改,但是如果放到风格里面去做,可以更容易的做到用户界面统一。如果有朋友还不清楚什么是风格什么是主题,你可以在Andoird的Dev Guide文档里面找到详细的解释,这篇文章要描述的是开发者怎么定制自己的风格和主题,以满足开发者的要求,使得用户界面更容易实现。
在这篇文章中,我们用一个简单的例子来逐步展示如何定制风格。主要用到一个定制的类TextView。我们通过修改设定给TestView的风格,让你一步步的了解如何定制风格的。
(一)简单定制及应用风格
开发者在查询OPhone的Dev Guide文档时,可能已经发现文档介绍了一种简单的风格定制。这种简单的风格定制,可以满足很多用户的需要。比如你仅仅希望修改View的背景颜色,或者字体大小等。你所能修改的所有条目(item)都是系统已经定义过的,开发者可以改变条目的值,来来达到不同的效果。示例一就是这样一个简单定制。在values目录下创建styles.xml,然后把风格的名字定义为Widget.TestView。设置背景颜色为白色。
view plaincopy to clipboardprint?
<resources>
<style name=”Widget.TestView” parent=”android:Widget”>
<item name=”android:background”>#FFFFFFFF</item>
</style>
</resources><span style=”font-style: italic; font-size: 10.5pt; font-family: ‘Times New Roman’;”><br></span>
示例一
示例一展示了如何定制风格,要把定制的风格应用到示例中的TestView,还需要在layout/testtheme.xml文件使用TestView时,指定这个风格。做完这个步骤,然后运行示例程序就可以看到白色背景效果。示例二中,
你可以看到语句style=”@style/Widget.TestView”,就是起这个作用的。
view plaincopy to clipboardprint?
<com.android.mytest.TestView
style=”@style/Widget.TestView”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”/>
示例二
(二)定制风格条目
如果开发者想要进一步开发,他可能发现仅仅继承并修改系统定义好的条目不能满足他的需要。比如开发者想让定制的TestView上可以显示一个带颜色的圆圈,显然系统定义的条目没有关于圆圈的信息。那怎么来实现?用前面介绍的简单定制就不能满足开发者的需要了。
简单起见,这里我们假设TestView需要了解到圆圈的颜色和半径就可以绘制一个圆圈。可能有人会异议说,我们在TestView的代码里面直接写上不就可以了嘛,实现起来是没有问题。但是一旦用户修改就必须得修改代码,就有可能出错。如果我们把这些信息可以放到自己定制的风格里面,就简单多了。如果用户想修改颜色或者大小,只需要修改定义风格xml文件的信息,不需要修改代码。
好了,决定要添加圆圈信息了,首先在styles.xml里面,添加circleColor和circleRadius两个条目,并设置他们相应的值,示例三展示了如何添加这两个条目。是不是这样就万事大吉了那?如果你现在去编译,肯定会得到这两个条目不存在的错误信息。为什么呢?我们想一下,系统没有定义这两个条目,我们仅仅使用了这两个条目,也没有定义它们,当然不知道两个条目是什么东西了。
如果要让系统知道有这两个条目,我们首先要定义它们。在values目录下创建一个attrs.xml文件。然后添加圆圈的半径和颜色。
在attrs.xml里面可以定义很多类型的条目(item),例如integer, float, color, reference, string等。在这里只定义了两种一个是用color来定义颜色,一种是用float来定义半径。这些类型信息告诉OPhone的资源(Resource)系统如何去解读这些字段,
具体参看示例四。
view plaincopy to clipboardprint?
<resources>
<style name=”Widget.TestView” parent=”android:Widget”>
<item name=”android:background”>#FFFFFFFF</item>
<item name=”circleColor”>#FFFF000</item>
<item name=”circleRadius”>60</item>
</style>
</resources>
示例三
view plaincopy to clipboardprint?
<resources>
<!– These are the attributes that make up customized theme. –>
<declare-styleable name=”TestView”>
<!– Default TestView style. –>
<attr name=”testViewStyle” format=”reference” />
<!– Color to use for the background of the Circle –>
<attr name=”circleColor” format=”color” />
<attr name=”circleRadius” format=”float”/>
</declare-styleable>
</resources>
示例四
在attrs.xml里面定义完成了,在styles.xml也添加了,现在你去编译应该不会有什么错误了。问题是,怎么让TestView知道这些信息。这两个条目是我们自己定义的,所以我们也得自己去添加一些代码让TestView了解到这些信息。以下的示例五,展示了怎么从资源总找到我们添加进去的两个条目的值。
view plaincopy to clipboardprint?
public TestView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
TypedArray a =
context.obtainStyledAttributes(
attrs, R.styleable.TestView, defStyle, 0);
int n = a.getIndexCount();
for (int i = 0; i < n; i++) {
int attr = a.getIndex(i);
switch (attr) {
case R.styleable.TestView_circleColor:
mCircleColor = a.getColor(attr, Color.RED);
break;
case R.styleable.TestView_circleRadius:
mCircleRadius = a.getFloat(attr, 40f);
break;
}
}
}
示例五
TestView获取到圆圈的颜色和半径信息后,就可以用这些信息去画开发者想要的圆圈了。关于如何画这个带颜色的圆圈,不是我们这里要描述的内容,请参看附件代码。
(三)设置默认风格
在第一部份讲到,如果开发者想要应用你所定制的风格给你定制的TestView,开发者用style=”@style/Widget.TestView”这种方式。如果开发者在他的应用里就用了一次TestView,我想这也没什么大不了的。但是如果开发者用到TestView的地方很多,这种方式就有点麻烦了,万一有时候还要修改这个风格,那就更糟糕了。下面是一个简单的方法,就是把你所定制的风格放到一个你自己定制的主题中去。关于创建一个主题,在OPhone的文档里面已经有了。细心的读者可能发现在示例四中,除了圆圈信息还有另外一个条目(testViewStyle),它的作用就是用在这里。在开发这定制的主题中,把这个条目的值设置为我们定制的风格(示例六),还记得风格的名字叫:Widget.TestView 吧?现在我们所定制的风格就是对这个TestView的默认风格了。
view plaincopy to clipboardprint?
<resources>
<style name=”Theme.OMS” parent=”android:Theme”>
<item name=”testViewStyle”>@style/Widget.TestView</item>
</style>
</resources>
示例六
然后就是应用所定制的主题到设计的应用,简单的一点的方式就是在AndroidManifest.xml中添加语句 android:theme=”@style/Theme.OMS”>。现在你就可以看到你所定制的风格的效果了。赶紧去编译运行一下。
本文首先描述了如何简单的定制风格,这种简单定制可以满足一部分要求,但是不能深度定制。如果要深度定制,就必须要开发者自己定义条目,并解析条目。最后介绍如何使用户定制的风格成为某个View的默认风格。
转自:http://www.codes51.com/article/detail_93991.html
Android开发:怎样定制界面风格的更多相关文章
- Android开发学习之 定制界面风格
统一的用户界面是可以使得应用程序更友好.要做到用户界面的统一,我们就必须用到风格(style)和主题(theme).OPhone系统提供了很多系统默认的风格和主题,但是很多情况下,这些不能满足我们的需 ...
- Android—— 定制界面风格
统一的用户界面是可以使得应用程序更友好.要做到用户界面的统一,我们就必须用到风格(style)和主题(theme).OPhone系统提供了很多系统默认的风格和主题,但是很多情况下,这些不能满足我们的需 ...
- Android开发如何定制framework层服务
刚刚跨完年,新年第一篇文章,那么今天将对Android开发framework中间层的服务定制使用作个总结.首先我们先导入Android平台源码framework层的代码到开发工具eclipse中,代码 ...
- 【Android开发-5】界面装修,五大布局你选谁
前言:假设要开一家店,门店装修是非常重要的事情.有钱都请专门的建筑设计公司来设计装修,没钱的仅仅能自己瞎折腾.好不好看全凭自己的感觉.像Android开发.在移动端大家看到的界面视觉不咋滴,一般连打开 ...
- 为Android开发人员定制的搜索引擎
我在谷歌上定制了一个专门针对Android开发人员的搜索引擎.载入慢的童鞋考虑FanQiang吧,作为技术人员使用Google才是王道. 在此推荐给大家:cx=01590883735180208228 ...
- android开发中在界面上实现曲线图的几个开源项目
转自:https://wapiknow.baidu.com/question/1959128379041474620?qq-pf-to=pcqq.c2c 几个相关开源项目: 1. MPAndroid ...
- Android开发技巧——定制仿微信图片裁剪控件
拍照--裁剪,或者是选择图片--裁剪,是我们设置头像或上传图片时经常需要的一组操作.上篇讲了Camera的使用,这篇讲一下我对图片裁剪的实现. 背景 下面的需求都来自产品. 裁剪图片要像微信那样,拖动 ...
- Android开发案例 - 欢迎界面
本文详细描述了如何实现如下图中的微信启动界面. 该类启动界面的特点是在整个Application的生命周期里, 它只会出现在第一次进入应用时, 即便按回退键到桌面之后. 使用该类启动界面的应用还有: ...
- Android开发之欢迎界面标准
import java.util.ArrayList; import android.app.Activity; import android.content.SharedPreferences; i ...
随机推荐
- JGroups 入门实践(转)
前言 JGroups是一个开源的纯java编写的可靠的群组通讯工具.其工作模式基于IP多播,但可以在可靠性和群组成员管理上进行扩展.其结构上设计灵活,提供了一种灵活兼容多种协议的协议栈. JGroup ...
- Kienct与Arduino学习笔记(2) 深度图像与现实世界的深度图的坐标
转载请注明出处:http://blog.csdn.net/lxk7280 首先,要接触一下KinectOrbit这个摄像机库,这篇文章中有这个库的下载网址和简单的介绍:http://blog.csdn ...
- Eclipse+超快速的模拟器Genymotion开展Android申请书(第一步:安装和配置Genymotion)
一.安装和配置Genymotion (1)因为Eclipse自带SDK模拟器,慢启动,别说 今天给大家介绍一个更快速的模拟器Genymotion (2)第一次去Genymotion在官方网站上注册一个 ...
- Atitit.web三编程模型 Web Page Web Forms 和 MVC
Atitit.web三编程模型 Web Page Web Forms 和 MVC 1. 编程模型是 Web Forms 和 MVC (Model, View, Controller). 2. W ...
- 于Eclipse传导C/C++配置方法开发(20140721新)
Eclipse 它是一个开源.基于Java可扩展的开发平台. 在其自己的.它只是一个框架和一组服务.对于通过插件组件构建开发环境. --从百度百科的短语. 简单的说Eclipse 是免费的开源的Jav ...
- hibernate 双向n-n
领域模型: 关系数据模型 双向 n-n 关联须要两端都使用集合属性 双向n-n关联必须使用连接表 集合属性应添加 key 子元素用以映射外键列, 集合元素里还应添加many-to-many子元素关联实 ...
- TP-Link WR842N VPN错误619 不能建立到远程计算机的连接
一直在用Tenacy这个VPN,不限时间不限流量的,可是近期发现链接VPN总是失败.在网上查了一下,发现居然是路由器的问题!回忆一下果然是路由器出事儿了,换这个842N之前,一直是能够链接VPN的,所 ...
- Spring相框:AOP详细说明
AOP中国的名字叫做面向方面编程.这个名字是很形象.因为你真的可以把像面包切系统.并直接增加面包的修改.科而异,对整个系统,小到一定的方法. AOP它有什么用?有关示例,各组分可以含有安全.事务.,A ...
- 有一个很大的整数list,需要求这个list中所有整数的和,写一个可以充分利用多核CPU的代码,来计算结果(转)
引用 前几天在网上看到一个淘宝的面试题:有一个很大的整数list,需要求这个list中所有整数的和,写一个可以充分利用多核CPU的代码,来计算结果.一:分析题目 从题中可以看到“很大的List”以及“ ...
- JSP简单的练习-使用JDOM阅读xml文件
<%@ page contentType="text/html; charset=gb2312" language="java" %> <%@ ...