目录(?)[-]

  1. 静态格式
  2. 代码中设定
  3. Style
  4. 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的更多相关文章

  1. 【转】 Pro Android学习笔记(四十):Fragment(5):适应不同屏幕或排版

    目录(?)[-] 设置横排和竖排的不同排版风格 改写代码 对于fragment,经常涉及不同屏幕尺寸和不同的排版风格.我们在基础小例子上做一下改动,在横排的时候,仍是现实左右两个fragment,在竖 ...

  2. 【转】 Pro Android学习笔记(四二):Fragment(7):切换效果

    目录(?)[-] 利用setTransition 利用setCustomAnimations 通过ObjectAnimator自定义动态效果 程序代码的编写 利用fragment transactio ...

  3. 【转】 Pro Android学习笔记(四八):ActionBar(1):Home图标区

    目录(?)[-] Home Icon 源代码 TextView的滚动 返回主activity或指定activity     ActionBar在Android 3.0 SDK中为平板引入,在4.0中也 ...

  4. 【转】 Pro Android学习笔记(四七):Dialog(4):一些补充和思考

    目录(?)[-] 编程思想封装接口 fragment和activity以其他fragment之间的通信 编程思想:封装接口 在小例子中,fragment会调用activity的onDialogDone ...

  5. 【转】 Pro Android学习笔记(四三):Fragment(8):再谈Transaction和管理器

    目录(?)[-] Transaction的一些操作 再谈FragmentManager 调用其他fragment的方法 唤起activity 唤起fragment和相互通信 一些其它 Transact ...

  6. 【转】Pro Android学习笔记(四):了解Android资源(下)

    处理任意的XML文件 自定义的xml文件放置在res/xml/下,可以通过R.xml.file_name来获取一个XMLResourceParser对象.下面是xml文件的例子: <rootna ...

  7. 【转】 Pro Android学习笔记(二九):用户界面和控制(17):include和merge

    目录(?)[-] xml控件代码重用include xml控件代码重用merge 横屏和竖屏landsacpe portrait xml控件代码重用:include 如果我们定义一个控件,需要在不同的 ...

  8. Pro Android学习笔记 ActionBar(1):Home图标区

     Pro Android学习笔记(四八):ActionBar(1):Home图标区 2013年03月10日 ⁄ 综合 ⁄ 共 3256字 ⁄ 字号 小 中 大 ⁄ 评论关闭 ActionBar在A ...

  9. 【转】 Pro Android学习笔记(五六):配置变化

    目录(?)[-] Activity的destorycreate过程 Fragment的destorycreate过程 onSaveInstanceState saveFragmentInstanceS ...

  10. 【转】 Pro Android学习笔记(二二):用户界面和控制(10):自定义Adapter

    目录(?)[-] 设计Adapter的布局 代码部分 Activity的代码 MyAdapter的代码数据源和构造函数 MyAdapter的代码实现自定义的adapter MyAdapter的代码继续 ...

随机推荐

  1. MySQL时间函数-获取当前时间-时间差

    MySQL中获取当前时间为now(),不同于sqlserver getdate(). SQLServer转MySQL除变化top 1 -> limit 1之后报错: limit [Err] 15 ...

  2. PAT 1053. 住房空置率 (20)

    在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化规律进行判断.判断方法如下: 在观察期内,若存在超过一半的日子用电量低于某给定的阈值e,则该住房为“可能空置”: 若观察期超过某 ...

  3. 聊聊数据库~5.SQL运维上篇

    1.6.SQL运维篇 运维这块逆天只能说够用,并不能说擅长,所以这篇就当抛砖之用,欢迎补充和纠错 PS:再说明下CentOS优化策略这部分的内容来源:首先这块逆天不是很擅长,所以主要是参考网上的DBA ...

  4. 使用 Node.js 对文本内容分词和关键词抽取

    npm install nodejieba var nodejieba = require("nodejieba"); var result = nodejieba.cut(&qu ...

  5. Python——Numpy的random子库

    NumPy的random子库 np.random.* np.random.rand() np.random.randn() np.random.randint() import numpy as np ...

  6. C# 串口调试助手源码

    本方法,禁用跨进程错误(做法不太好,但是对于单片机出身的人来说,好理解,能用就行). 基本功能: 1.点串口号的下拉菜单自动当前检索设备管理器的COM 2.发送模式可选,hex和string两种 3. ...

  7. Linux基础系列:常用命令(6)_nfs服务与nginx服务

    NFS介绍: NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布.功能是通过网络让不同的机器.不同的操作系统 ...

  8. HDU - 1033 Edge 【模拟】

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1033 题意 给定一个起始点 300 420 走的第一步是 310 420 下面的每一步 都由 输入决定 ...

  9. 每天一个Linux命令(15)tail命令

    tail命令用于输入文件中的尾部内容.tail命令默认在屏幕上显示指定文件的末尾10行. 如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题.     (1)用法: 用法:   tail ...

  10. iOS Code Signing: 解惑详解

    iPhone开发的代码签名 代码签名确保代码的真实以及明确识别代码的来源.在代码运行在一个开发系统以前,以及在代码提交到Apple发布以前,Apple要求所有的的应用程序都必须进行数字签名.另外,Ap ...