【转】Pro Android学习笔记(二四):用户界面和控制(12):Style和Theme
静态格式
在res/values中设置静态的Style,在资源中设置静态Style可使用的HTML格式有<i> <u> <b> <sup> <sub> <strike> <big> <small> <monospace>。
<string name="ui_styleText_1"><i>Static</i> style <u>in</u> a <b>TextView</b>. <strike>strike</strike></string>
我们在XML中进行试验,也顺带看看其他效果的设置。
<TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:autoLink="web|email"
android:text="Please visit www.androidbook.com for more help on using Android."
android:minLines="3"
android:typeface="serif" />
<TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/ui_styleText_1"/>
代码中设定
在代码中通过Spannable中设定Style。如下图所示。对于EditText,我们在xml中设置了 android:inputType="text|textAutoCorrect|textAutoComplete|textMultiLine",故下图中出现红色下划线,表示拼写错误。

//TextView需要先指定BufferType,才能通过getText( )获取spannable对象。
TextView tv = (TextView)findViewById(R.id.ui_style_tv);
tv.setText("This text is stored in a Spannable", TextView.BufferType.SPANNABLE);
Spannable spanTv = (Spannable)tv.getText();
//通过setSpan(),对text中的某个范围,本例0~7的字符进行处理
spanTv.setSpan(new BackgroundColorSpan(Color.RED), 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spanTv.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC),0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
//EditText可以直接获取通过getText()获取Spannable对象
EditText et = (EditText)findViewById(R.id.ui_style_ed);
et.setText("Styling the content of an EditText dynamically");
Spannable spanEt = (Spannable)et.getText();
spanEt.setSpan(new BackgroundColorSpan(Color.RED), 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spanEt.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Style
如果相同的格式用于多个控件,每个控件都写一遍,很麻烦,可以定义成为style,并在控件中设置style。style在res/values/中定义,如下所示。
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 例子1:定义名字为“MyErrorText”的style, 设置颜色和字体,还顺带设置了width和height,不用每次写这么烦 -->
<style name="MyErrorText">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">#FF0000</item>
<item name="android:typeface">monospace</item>
</style>
<!-- 例子2:style树状层次结构:style提供一个很方便的层次结构,可以一层一层地通过“.”进行扩展 -->
<style name="MyErrorText.Danger">
<item name="android:textStyle">bold</item>
</style>
<!-- 例子3:对于扩展android自带的style,不能采用“.”,而是用parent。android自带的style可以在sdk\platforms\android-xx\data\res\values\styles.xml 查看 -->
<style name="MyText" parent="@android:style/TextAppearance.Small">
<item name="android:textColor">#FF00FF</item>
</style>
</resources>
layout xml文件的相关内容如下:
<-- 调用style,和其他属性不同,前面没有android: -->
<TextView style="@style/MyErrorText"
android:text="Error: No Error here." />
<-- 调用居于层次结构的style -->
<TextView style="@style/MyErrorText.Danger"
android:text="Fatal Error: Test...." />
<-- 调用android系统自定义的style-->
<TextView style="@android:style/TextAppearance.Holo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Android Default Style : TextAppearance.Holo" />
<-- 测试style的例子3的效果 -->
<TextView style="@style/MyText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Information: my text" />
<-- 对于系统定义的Theme,我们可以只使用其中的某个属性 -->
<EditText android:id="@+id/ui_style_ed2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="?android:textColorSecondary"
android:text="@string/ui_styleTest"/>
Theme
在上面的例子中已经提到theme。使用style可以避免在逐个控件中进行控件属性的描述,如果修改可以只在一个地方进行修改,提供了很大的便捷,但是仍需要在每个控件中进行style指定。如果希望属性能够在整个activity或者整个application都实用,可以采用theme。theme和style概念上很相似,在定义属性时,一样采用style在res/vaules/的xml文件中描述。如下面的例子。android系统自定义的theme在sdk\platforms\android-xx\data\res\values\themes.xml中定义。
<style name="MyTheme" parent="@android:style/Theme">
<item name="android:textColor">#666666</item>
</style>
Theme在AndroidManifest.xml中设置。
对于activity:
<activity ... android:theme="@style/MyTheme" ... />
对于application:
<application .... android:theme="@style/MyTheme" ... />

相关链接: 我的Android开发相关文章
【转】Pro Android学习笔记(二四):用户界面和控制(12):Style和Theme的更多相关文章
- 【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版
目录(?)[-] 设置横排和竖排的不同排版风格 改写代码 对于fragment,经常涉及不同屏幕尺寸和不同的排版风格.我们在基础小例子上做一下改动,在横排的时候,仍是现实左右两个fragment,在竖 ...
- 【转】 Pro Android学习笔记(四二):Fragment(7):切换效果
目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transactio ...
- 【转】 Pro Android学习笔记(四八):ActionBar(1):Home图标区
目录(?)[-] Home Icon 源代码 TextView的滚动 返回主activity或指定activity ActionBar在Android 3.0 SDK中为平板引入,在4.0中也 ...
- 【转】 Pro Android学习笔记(四七):Dialog(4):一些补充和思考
目录(?)[-] 编程思想封装接口 fragment和activity以其他fragment之间的通信 编程思想:封装接口 在小例子中,fragment会调用activity的onDialogDone ...
- 【转】 Pro Android学习笔记(四三):Fragment(8):再谈Transaction和管理器
目录(?)[-] Transaction的一些操作 再谈FragmentManager 调用其他fragment的方法 唤起activity 唤起fragment和相互通信 一些其它 Transact ...
- 【转】Pro Android学习笔记(四):了解Android资源(下)
处理任意的XML文件 自定义的xml文件放置在res/xml/下,可以通过R.xml.file_name来获取一个XMLResourceParser对象.下面是xml文件的例子: <rootna ...
- 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge
目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的 ...
- Pro Android学习笔记 ActionBar(1):Home图标区
Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...
- 【转】 Pro Android学习笔记(五六):配置变化
目录(?)[-] Activity的destorycreate过程 Fragment的destorycreate过程 onSaveInstanceState saveFragmentInstanceS ...
- 【转】 Pro Android学习笔记(二二):用户界面和控制(10):自定义Adapter
目录(?)[-] 设计Adapter的布局 代码部分 Activity的代码 MyAdapter的代码数据源和构造函数 MyAdapter的代码实现自定义的adapter MyAdapter的代码继续 ...
随机推荐
- 页游手游服务器(二)c支持mysql
上一篇说的是liua的net拓展,这一篇说lua的sql拓展,准确说是mysql拓展,这里推荐下postgre,比mysql好用,支持数组,各种好,不过腾讯平台不支持,所以你的公司要和腾讯合作,掂量下 ...
- 基于PI的Webservice发布实例
[转自http://blog.csdn.net/yin_chuan_lang/article/details/6706816] 最近的项目中,接口较多,而Webservice技术是主要实现方式之一.下 ...
- 【Prometheus】第二篇---基本查询语法
这几天忙着开发别的项目,今天抽空写一下Prometheus的查询语法 1,查看指标 直接输入指标名字就行了,grafana会自动补全 2,查看某个指标的使用率,比如cpu使用率 用到rate函数,ra ...
- Yii2 如何更好的在页面注入CSS
首先 先添加一个widgets,代码如下(提示:使用时注意修改命名空间) <?php /** * User: yiqing * Date: 2014/12/15 * Time: 0:21 */ ...
- dev系列之gridview
gridview新增一行就激活编辑,及显示闪动的光标 gridView1.ShowEditor(); 隐藏Gridview表头上面的panel this.gridView1.OptionsView.S ...
- 【leetcode刷题笔记】Set Matrix Zeroes
Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. 题解:因为题 ...
- 关于 haproxy keepalived的测试
可以阅读的一篇文章(http://blog.csdn.net/xyang81/article/details/52554398) 以下测试的配置都是基本的,简单化的,达到了效果滴,没有参考上面文档 准 ...
- java套接字实现接口访问
是学校博客上的:http://blog.csdn.net/z69183787/article/details/17580325
- requests获取响应时间(elapsed)与超时(timeout)
前言 requests发请求时,接口的响应时间,也是我们需要关注的一个点,如果响应时间太长,也是不合理的.如果服务端没及时响应,也不能一直等着,可以设置一个timeout超时的时间 关于request ...
- Network IP Availability Extension
可以查询网络的IP使用情况 neutron net-ip-availability-list neutron net-ip-availability-show GET /v2.0/network-ip ...