Android应用资源---绘制资源类型(Drawable)(三)

翻译 2012年04月22日 17:05:56

状态列表

StateListDrawable一个被定义在XML中的可绘制对象,它依赖对象的状态,使用不同的图片来代表同一个图形。如,一个Button能够存在几种不同状态中的一种(如按下、聚焦或者都不是),通过使用状态列表,能够给每种状态提供不同的背景图片。

能够在一个XML文件中描述状态列表,每个图形都用一个<item>元素来代表,它们被放在<selector>元素内。每个<item>使用各种属性来描述图形被绘制时要使用那个状态。

在状态改变期间,状态列表会从上到下被遍历,并且会使用到第一个匹配的项目,然后遍历终止,选择不是基于最优匹配规则。

文件位置(FILE LOCATION):

res/drawable/filename.xml

filename被用于资源ID

被编译资源的数据类型(COMPILED RESOURCE DATATYPE

资源指向一个StateListDrawable对象。

资源引用(RESOURCE REFERENCE):

Java代码中:R.drawable.filename

XML中:@[package:]drawable/filename

语法(SYNTAX):

<?xml version="1.0" encoding="utf-8"?>
<selectorxmlns:android="http://schemas.android.com/apk/res/android"
   
android:constantSize=["true" | "false"]
   
android:dither=["true" | "false"
]
   
android:variablePadding=["true" | "false"] >

   
<item
       
android:drawable="@[package:]drawable/drawable_resource"
       
android:state_pressed=["true" | "false"]
       
android:state_focused=["true" | "false"
]
       
android:state_hovered=["true" | "false"
]
       
android:state_selected=["true" | "false"
]
       
android:state_checkable=["true" | "false"
]
       
android:state_checked=["true" | "false"
]
       
android:state_enabled=["true" | "false"
]
       
android:state_activated=["true" | "false"
]
       
android:state_window_focused=["true" | "false"] />

</selector>

元素(ELEMENTS):

<selector>

必须的,它必须是根元素。要包含一个或多个<item>元素。

属性(ATTRIBUTES):

    xmlns:android

        字符串值,必须的。它定义了XML的命名空间,必须是http://schemas.android.com/apk/res/android

    android:constantSize

        一个布尔值,如果设置为true,那么绘制资源要报告内部尺寸,并把这个尺寸作为状态改变的常量(这个尺寸是所有状态中最大的那个);否则会基于当前状态来进行尺寸的变化,默认是false

    android:dither

        一个布尔值,如果设置为true,那么会启用位图仿色处理,否则会禁用仿色处理,默认是true

    android:variablePadding

        一个布尔值,如果设置为true,绘制资源的边距应该基于当前被选择的状态来改变,否则边距应该保持相同(基于所有状态中最大边距的那个)。启用这个功能需要自己处理状态变化时的布局,因此经常不支持这么设置。默认设置时false

<item>

    定义用于某个确定状态的绘制资源,这个资源是通过它的属性来描述的。它必须是<selector>元素的一个子元素。

属性(ATTRIBUTES):

    android:drawable

    绘制资源,必须的。它指向要引用的可绘制资源。

    android:state_pressed

    一个布尔值,如果设置为true,那么这个项目应该在对象被按下时使用(如,当按钮被触摸或点击时)。否则这个项目会用于默认的非按下状态。

    android:state_foucused

    一个布尔值,如果设置为true,那么这个项目应该在对象有输入焦点时被使用(如用户选择了一个文本输入域);否则,这个项目应用被用于默认的非焦点状态。

    android:state_houvered

    一个布尔值,如果设置为true,那么这个项目应该在光标悬停在对象之上时被使用,否则应该使用默认的非悬停状态。通常,这个绘制资源会使用与“聚焦”状态相同的资源。

  这个状态在API级别14中被引入。

    android:state_selected

    一个布尔值,如果设置为true,那么这个项目应该在用户选择了一个导航控件时使用(如,用方向板在一个列表中导航);如果设置为false,那么在对象没有被选择时这个项目就不应该使用这个状态。

    当聚焦状态(android:state_focused)不满足需要时,要使用选择状态(如当列表视图有焦点,并且用导向板选择列表中的项目时)。

    android:state_checkable

    一个布尔值,如果设置为true,那么当对象是可被复选的时候,应该使用这个项目,否则这个对象不能被复现。(它仅在对象在可选和不可选之间变换时才有用)。

    android:state_checked

    一个布尔值,如果设置为true,那么这个项目应用在对象被复选时使用;否则应该使用于非复选状态。

    android:state_enabled

一个布尔值,如果设置为true,那么这个项目应用于对象启用状态(接收触摸或点击事件的能力),否则应该用于禁用状态。

    android:state_activated

    一个布尔值,如果设置为ture,那么这个项目应该在对象被持久选择时使用(如对象的高亮状态),否则应该在对象没有被激活时使用这个状态。

    android:state_window_focused

    一个布尔值,如果设置true,那么这个项目应该在应用程序窗口有焦点时被使用(应用程序是在前台)。否则应该用于应用程序窗口没有焦点时的状态(如,通知栏被来下或对话框显示的时候)。

注意:要记住,Android会使用状态列表中第一个与当前状态匹配的项目,因此,如果列表中第一个项目没有包含以上介绍的任何一个属性,那么在任何时候都会使用这个项目,这就是为什么要它放到列表的最后的原因。

列子(EXAMPLE):

XML文件被保存在res/drawable/button.xml中:

<?xml version="1.0" encoding="utf-8"?>
<selectorxmlns:android="http://schemas.android.com/apk/res/android">
   
<itemandroid:state_pressed="true"
         
android:drawable="@drawable/button_pressed"/><!-- pressed -->
   
<itemandroid:state_focused="true"
         
android:drawable="@drawable/button_focused"/><!-- focused -->
   
<itemandroid:state_hovered="true"
         
android:drawable="@drawable/button_focused"/><!-- hovered -->
   
<itemandroid:drawable="@drawable/button_normal"/><!-- default -->
</selector>

下面的这个布局XML在一个Button控件上使用这个状态列表:

<Button
   
android:layout_height="wrap_content"
   
android:layout_width="wrap_content"
   
android:background="@drawable/button"/>

 

Android应用资源---绘制资源类型(Drawable)(一)

可绘制资源是指能够被绘制到屏幕上的图形的一般化概念,并且能够用诸如getDrawable(int)等API方法来获取这些资源,或者使用诸如android:drawable和android:icon属性...
  • longzhongren
  • longzhongren
  • 2014年05月05日 13:04
  • 453

PHP中的资源类型

在PHP中,我们经常使用到资源类型变量。例如:mysql连接、文件句柄等。 这些变量无法使用标量来表示,那么在Zend内核中是如何将PHP中的资源变量与C语言中的资源衔接的呢? 一、资源变量...
  • woshinannan741
  • woshinannan741
  • 2016年01月14日 10:28
  • 2653

php变量类型之资源变量

php resource 资源类型 资源类型是一种特殊的变量,保存了到外部资源的一个引用。资源是通过专门的函数来建立和使用的。 比如数据库连接,打开文件,图形画布区域等。资源类型其实仅仅是一个整数,而...
  • masbwylc
  • masbwylc
  • 2013年11月01日 10:48
  • 619

Canvas和Drawable 绘制组件

将博客搬至CSDN
  • snowgeneral
  • snowgeneral
  • 2014年10月23日 11:28
  • 1991

VC++ 导入自定义资源

在VC中使用自定义资源,FindResource,LoadResource 一、添加 添加资源时选择自定义,IDE会为你生成一个新的二进制资源,然后你就可以将你已经存在的二进制文件作为自定...
  • Howard_Liu1314
  • Howard_Liu1314
  • 2014年03月07日 21:59
  • 3496

Android的资源类型之Drawable

Drawable资源概述: 一种可以通过getDrawable(int)方法获取到的,或者可以通过android:drawable和android:icon属性应用到XML文件的资源。个人理解,可以转...
  • gongsunjinqian
  • gongsunjinqian
  • 2016年07月13日 18:17
  • 697

Android资源之Drawable介绍(一)

在Android开发中,资源文件是我们最熟悉和最需要的重要部分。Drawable作为资源的一种,更是项目中必备的资源。 Android中的Drawable资源有很多种,诸如LayerDrawable...
  • true100
  • true100
  • 2016年08月25日 17:11
  • 1598

Drawable资源——Scale Drawable 规模可绘制

ScaleDrawable:它可以根据自己的等级(level)将指定的Drawable缩放到一定比例。...
  • reflse
  • reflse
  • 2016年05月03日 14:32
  • 712

VC中使用自定义资源

一、前言   在VC环境中除了我们所常用的Dialog、Menu和Bitmap等标准资源类型之外,它还支持自定义资源类型(Custom Resource),我们自定义资源类型能做些什么呢?呵呵,用处...
  • tianshi_1988
  • tianshi_1988
  • 2016年04月08日 12:15
  • 737

android中drawable资源的解释及例子

文章中的内容参考Dev Guide中的Drawable Resources,英文好的朋友可以直接去读英文。总结这篇文章的目的是自己在使用drawable资源遇到一些问题跟大家分享下,同时整理下自己对d...
  • wode_dream
  • wode_dream
  • 2014年08月15日 14:25
  • 6457
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android应用资源---绘制资源类型(Drawable)(三)
举报原因:
原因补充:

(最多只允许输入30个字)