`
aokunsang
  • 浏览: 816025 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android资源文件详细介绍

 
阅读更多

摘自:http://blog.csdn.net/sayyanfu/archive/2011/02/18/6193809.aspx

 

Drawable 资源是对图像的一个抽象,你可以通过 getDrawable(int) 得到并绘制到屏幕上。这里有几种不同类型的 Drawable 

 

Bitmap File

    一个 Bitmap 图像文件( .png  .jpg  .gif )。 BitmapDrawable 

Nine-Patch File

    一个带有伸缩区域的 PNG 文件,可以基于 content 伸缩图片( .9.png )。 NinePatchDrawable 

State List

    一个 XML 文件,为不同的状态引用不同的 Bitmap 图像(例如,当按钮按下时使用不同的图片)。 StateListDrawable 

Color

    定义在 XML 中的资源,指定一个矩形(圆角可以有)的颜色。 PaintDrawable 

Shape

    一个 XML 文件,定义了一个几何形状,包括颜色和渐变。 ShapeDrawable 

 

AnimationDrawable 资源的说明在【 Animation 资源】文章中。

 

Bitmap File

 

基本的 Bitmap 图像。 Android 支持几种不同格式的 Bitmap 文件: .png (最佳)、 .jpg (可接受)、 .gif (不要)。

注意: Bitmap 文件可能会被 aapt 工具进行无损图像压缩优化。例如,一个真彩色的 PNG (不超过 256 色)可能会被转换成一个带有颜色板的 8  PNG 。这样做能保证图片质量一样,但减少内存占用。因此,需要了解的是放在这个文件夹下的二进制图像在编译时可能会发生变更。如果你打算以位流方式读取图像来转化成 Bitmap 的话,可以把它们放到 res/raw 文件中,在这里,它们不会被优化。

 

File Location 

    res/drawable/filename.png (.png, .jpg,  .gif)

    文件名会被当作资源 ID 使用。

Complied Resource Datatype 

    指向 BitmapDrawable 的资源指针。

Resource Reference 

    R.drawable.filename  Java 

    @[package:]drawable/filename  XML 

Example 

     res/drawable/myimage.png 位置保存了一张图片,在 Layout XML 中可以应用这个图片到一个 View 上:

    <ImageView

        android:layout_height="wrap_content"

        android:layout_width="wrap_content"

        android:src="@drawable/myimage" />

 

    下面的代码可以以 Drawable 方式得到图片:

    Resources res = getResources();

    Drawable drawable = res.getDrawable(R.drawable.myimage);

 

Nine-Patch File

 

NinePatch 是一种 PNG 图像,可以定义拉伸区域,当 View  content 超出图像边界的话, Android 会拉伸它。典型用法是把这个图像设置为 View 的背景,而这个 View 至少有一个尺寸设置为“ wrap_content ”,当这个 View 变大来容纳 content 时, Nine-Patch 图像也会拉伸来匹配 View 的大小。

 

File Location 

    res/drawable/filename.9.png

    文件名将被当作资源 ID 使用。

Complied Resource Datatype 

    指向 NinePatchDrawable 的资源指针。

Resource Reference 

    R.drawable.filename  Java 

    @[package:]drawable/filename  XML 

Example 

     res/drawable/myninepatch.9.png 位置保存了一张图片,在 Layout XML 中可以应用这个图片到一个 View上:

    <Button

        android:layout_height="wrap_content"

        android:layout_width="wrap_content"

        android:background="@drawable/myninepatch" />

 

State List

 

StateListDrawable 是定义在 XML 中的 Drawable 对象,能根据状态来呈现不同的图像。例如, Button 存在多种不同的状态( pressed  focused  other ),使用 StateListDrawable ,你可以为 Button 的每个状态提供不同的按钮图像。

 

你可以在 XML 文件中描述状态列表。在 <selector> 元素里的每个 <item> 代表每个图像。每个 <item> 使用不同的特性来描述使用的时机。

 

当每次状态改变时, StateList 都会从上到下遍历一次,第一个匹配当前状态的 item 将被使用——选择的过程不是基于“最佳匹配”,只是符合 state 的最低标准的第一个 item 

 

File Location

    Res/drawable/filename.xml

    文件名将被当作资源 ID 使用。

Complied Resource Datatype 

    指向 StateListDrawable 的资源指针。

Resource Reference 

    R.drawable.filename  Java 

    @[package:]drawable/filename  XML 

Syntax 

<? xml version = "1.0" encoding = "utf-8" ?>  

< selector xmlns: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_selected = ["true" "false" 

        android:state_active = ["true" "false" 

        android:state_checkable = ["true" "false" 

        android:state_checked = ["true" "false" 

        android:state_enabled = ["true" "false" 

        android:state_window_focused = ["true" "false" />  

</selector>

Elements 

    <selector>

    必须。必须是根元素。可以包含一个或多个 <item> 元素。

    Attributes 

        xmlns:android

                  String 。必须。定义 XML 的命名空间,必须是

                   http://schemas.android.com/apk/res/android ”。

              android:constantSize

           Boolean 。“ true ”表示随着状态变化, Drawable 的大小保持不变(所有状态中最大的 size);“ false ”表示大小会变化。默认是 false 

              android:dither

Boolean 。“ true ”表示当 Bitmap 和屏幕的不是相同的像素设定时支持 Bitmap 抖动(例如, ARGB 8888  Bitmap  RGB 565 的屏幕);“ false ”表示不支持。默认是“ true ”。

              android:variablePadding

                     Boolean 。“ true ”表示 Drawable  Padding 可以变化;“ false ”表示 Padding 保持相同(所有状态的最大 Padding )。使能这一特征需要在状态变化时处理 Layout ,一般都不支持。默认值是 false 

    <item>

              定义特定状态的 Drawable ,通过它的特性指定。必须是 <selector> 的子元素。

              Attributes 

                  android:drawable

                            Drawable 资源。必须。指向一个 Drawable 资源。

    android:state_pressed

Boolean 。“ true ”表示按下状态使用(例如按钮按下);“ false ”表示非按下状态使用。

                  android:state_focused

Boolean 。“ true ”表示聚焦状态使用(例如使用滚动球 /D-pad 聚焦 Button );“ false ”表示非聚焦状态使用。

                  android:state_selected

Boolean 。“ true ”表示选中状态使用(例如 Tab 打开);“ false ”表示非选中状态使用。

                  android:state_checkable

Boolean 。“ true ”表示可勾选状态时使用;“ false ”表示非可勾选状态使用。(只对能切换可勾选—非可勾选的构件有用。)

                  android:state_checked

                            Boolean 。“ true ”表示勾选状态使用;“ false ”表示非勾选状态使用。

                  android:state_enabled

Boolean 。“ true ”表示可用状态使用(能接收触摸 / 点击事件);“ false ”表示不可用状态使用。

                  android:window_focused

Boolean 。“ true ”表示应用程序窗口有焦点时使用(应用程序在前台);“ false ”表示无焦点时使用(例如 Notification 栏拉下或对话框显示)。

注意: 记住一点, StateList 中第一个匹配当前状态的 item 会被使用。因此,如果第一个 item 没有任何状态特性的话,那么它将每次都被使用,这也是为什么默认的值必须总是在最后(如下面的例子所示)。

 

Example 

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

<? xml version = "1.0" encoding = "utf-8" ?>  

<selector xmlns:android = "http://schemas.android.com/apk/res/android" >  

    <item android:state_pressed = "true"  

          android:drawable = "@drawable/button_pressed" /> <!-- pressed -->  

    <item android:state_focused = "true"  

          android:drawable = "@drawable/button_focused" /> <!-- focused -->  

    <item android:drawable = "@drawable/button_normal" /> <!-- default -->  

</selector>

    Layout XML 将这个 Drawable 应用到一个 View 上:

<ImageView  

    android:layout_height = "wrap_content"  

    android:layout_width = "wrap_content"  

    android:src = "@drawable/button" />

 

Color

 

定义在 XML 中的 color ,可以当作 Drawable 使用,来填充矩形区域(圆角可以有)。这种 Drawable 的行为很像是颜色填充。

注意: Color Drawable 是一种简单的资源,可以使用 name 特性来引用其值(不再是 XML 文件的名)。因此,你可以在一个 XML 文件中的 <resources> 元素下添加多个 Color Drawable 

 

File Location 

    res/drawable/filename.xml

    文件名随意。元素的 name 将会当作资源 ID 使用。

Complied Resource Datatype 

    指向 PaintDrawable 资源的指针。

Resource Reference 

    R.drawable.color_name  Java 

    @[package:]drawable/color_name  XML 

Syntax 

<? xml version = "1.0" encoding = "utf-8" ?>  

< resources >  

    < drawable   name = "color_name "  

        > color </drawable>  

</resources>

Elements 

    <resources>

           必须。必须是根节点。

           没有特性。

    <drawable>

一个 color Drawable 。其值可以是任何有效的十六进制颜色值或者 Color 资源。 Color 值总是以“ # ”开头,后面紧跟 Alpha-Red-Green-Blue 信息,格式是: #RGB  #ARGB 或者 #AARRGGBB 

              Attributes 

                  name

                            String 。必须。 Color 的名字。这个名字将被当作资源 ID 使用。

Example 

    XML 文件保存在 res/drawable/color.xml 

<? xml version = "1.0" encoding = "utf-8" ?>  

<resources>  

    <drawable name = "solid_red" > #f00 </drawable>  

    <drawable name = "solid_blue" > #0000ff </drawable>  

</resources>

    Layout XML 将会把这个 Color Drawable 应用到一个 View 上:

<TextView  

    android:layout_width = "fill_parent"  

    android:layout_height = "wrap_content"  

    android:background = "@drawable/solid_blue" />

    代码中获取 Color Drawable 并应用到 View 上:

Resources res =   getResources () ;  

Drawable redDrawable = res . getDrawable ( R . drawable . solid_red );  

 

TextView tv = ( TextView ) findViewByID ( R . id . text );  

tv . setBackground ( redDrawable );

 

Shape

 

定义在 XML 中的几何形状。

 

File Location 

    res/drawable/filename.xml

    文件名将被当作资源 ID 使用。

Complied Resource Datatype 

    指向 ShapeDrawable 的资源指针。

Resource Reference 

    R.drawable.filename  Java 

    @[package:]drawable/filename  XML 

Syntax 

<? xml version = "1.0" encoding = "utf-8" ?>  

< shape xmlns:android = "http://schemas.android.com/apk/res/android"  

    android:shape = ["rectangle" "oval" "line" "ring" >  

    < gradient  

        android:angle = "integer "  

        android:centerX = "integer "  

        android:centerY = "integer "  

        android:centerColor = "integer "  

        android:endColor = "color "  

        android:gradientRadius = "integer "  

        android:startColor = "color "  

        android:type = ["linear" "radial" "sweep" 

        android:usesLevel = ["true" "false" />  

    < solid  

        android:color = "color " />  

    < stroke  

        android:width = "integer "  

        android:color = "color "  

        android:dashWidth = "integer "  

        android:dashGap = "integer " />  

    < padding  

        android:left = "integer "  

        android:top = "integer "  

        android:right = "integer "  

        android:bottom = "integer " />  

    < corners  

        android:radius = "integer "  

        android:topLeftRadius = "integer "  

        android:topRightRadius = "integer "  

        android:bottomLeftRadius = "integer "  

        android:bottomRightRadius = "integer " />  

</shape>

Elements 

    <shape>

              必须。必须是根元素。

    Attributes 

              android:shape

                  Keyword 。定义 Shape 的类型。有效的值包括:

 

Value

Desciption

"rectangle"

矩形。默认形状。

"oval"

椭圆。

"line"

水平直线。需要 <stroke> 元素定义线的宽度。

"ring"

环形。

 

 

接下来的特性只能在 android:shape=”ring” 时使用:

              android:innerRadius

                  Dimension 。内环的半径。

              android:innerRadiusRatio

         Float 。以环的宽度比率来表示内环的半径。例如,如果 android:innerRadiusRatio=”5” ,内环半径等于环的宽度除以 5 。这个值可以被 android:innerRadius 覆盖。默认值是 9 

              android:thickness

                  Dimension 。环的厚度。

              android:thicknessRatio

           Float 。以环的宽度比率来表示环的厚度。例如,如果 android:thicknessRatio=”2” ,厚度就等于环的宽度除以 2 。这个值可以被 android:thickness 覆盖。默认值是 3 

              android:useLevel

                  Boolean 。“ true ”表示可以当作 LevelListDrawable 使用。一般都为“ false ”。

   

<gradient>

               Shape 指定渐变色。

Attributes 

              android:angle

Integer 。渐变色的角度值。 0 表示从左到右, 90 表示从下到上。必须是 45 的倍数,默认是 0 

              android:centerX

                  Float 。渐变色中心的 X 相对位置( 0-1.0 )。当 android:type=”linear” 时无效。

              android:centerY

                  Float 。渐变色中心的 Y 相对位置( 0-1.0 )。当 android:type=”linear” 时无效。

              android:centerColor

                  Color 。可选的颜色,出现在 start  end 颜色之间。

              android:endColor

                  Color  end 颜色。

              android:gradientRadius

                  Float 。渐变色的半径。当 android:type=”radial” 时有效。

              android:startColor

                  Color  start 颜色。

android:type

                  Keyword 。渐变色的样式。有效值为:

 

Value

Description

"linear"

线性渐变,默认值。

"radial"

环形渐变。 start 颜色是处于中间的颜色。

"sweep"

sweep 渐变

 

              android:useLevel

                  Boolean 。“ true ”表示可以当作 LevelListDrawable 使用。

   

<solid>

              填充 shape 的单一色。

Attributes 

    android:color

                  Color 。这个颜色会应用到 shape 上。

   

<stroke>

              shape 的线形。

    Attributes 

              android:width

                  Dimension 。线的厚度。

              android:color

                  Color 。线的颜色。

              android:dashGap

                  Dimension 。间断线间的距离。仅在 android:dashWidth 设定时有效。

              android:dashWidth

                  Dimension 。间断线的大小。仅在 android:dashGap 设定时有效。

 

    <padding>

              内部 View 元素的边距。

    Attributes 

              android:left

                  Dimension 。左内边距。

              android:top

                  Dimension 。上内边距。

              android:right

                  Dimension 。右内边距。

              android:bottom

                  Dimension 。下内边距。

 

    <corners>

               shape 创建圆角。当 shape 是一个矩形时有效。

    Attributes 

              android:radius

                  Dimension 。圆角的半径。会被下面的特性覆盖。

              android:topLeftRadius

                  Dimension 。左上圆角半径。

              android:topRightRadius

                  Dimension 。右上圆角半径。

              android:bottomLeftRadius

                  Dimension 。左下圆角半径。

              android:bottomRightRadius

                  Dimension 。右下圆角半径。

 

Examples 

    XML 文件保存在 res/drawable/gradient_box.xml

 

<? xml version = "1.0" encoding = "utf-8" ?>  

<shape xmlns:android = "http://schemas.android.com/apk/res/android"  

    android:shape = "rectangle" >  

    <gradient  

        android:startColor = "#FFFF0000"  

        android:endColor = "#80FF00FF"  

        android:angle = "45" />  

    <padding android:left = "7dp"  

        android:top = "7dp"  

        android:right = "7dp"  

        android:bottom = "7dp" />  

    <corners android:radius = "8dp" />  

</shape>

    Layout XML 将被当作 ShapeDrawable 应用到一个 View 上:

<TextView  

    android:background = "@drawable/gradient_box"  

    android:layout_height = "wrap_content"  

    android:layout_width = "wrap_content" />

    代码中也可以获得 ShapeDrawable ,然后应用到 View 上:

Resources res = getResources () ;  

Drawable shape = res . getDrawable ( R . drawable . gradient_box );  

 

TextView tv = ( TextView ) findViewByID ( R . id . textview );  

tv . setBackground ( shape );

分享到:
评论

相关推荐

    android资源文件详解

    文档《android资源文件详解》对res文件夹下的anim、drawable、xml等资源文件进行了详细介绍。 anim文件夹用于存放动画资源,分为两种类型:一种是补间动画(tweened animation),它可以通过改变XML文件中的属性来...

    android动态加载外部资源文件

    二、Android资源管理机制 在Android系统中,资源通过R类进行管理,R类在编译时自动生成,包含了应用所有资源的ID。在运行时,我们通常通过Resources对象来访问这些资源。但要从外部apk加载资源,需要跳过这个系统...

    Unity调用Android文件资源管理选择文件

    Unity 调用Android文件资源管理器,可以选择Android手机上的图片,视频等一些列文件,并且获得相关的文件路径。直接导入Unity即可运行。测试已经通过

    Android资源文件混淆工具

    本文将深入探讨"Android资源文件混淆工具"这一主题,解释混淆的目的、工作原理以及如何使用`resguard-tools`这个工具进行资源文件混淆。 首先,我们要明白混淆的概念。混淆是一种软件保护技术,其目的是使恶意用户...

    Android资源文件详解

    本文将详细介绍Android资源文件的分类、组织结构和使用方法。 首先,资源文件夹中存放的文件类型大致可以分为以下几类: 1. **anim**: 该文件夹内存放动画资源,包括XML定义的逐帧动画(frame-by-frame animation)...

    AndroidStudio清理无用冗余资源文件工具使用方法

    本文将详细介绍如何利用Android Studio中的工具来清理无用和冗余的资源文件,提升应用性能,并优化APK大小。 一、Android Studio简介 Android Studio是Google为Android开发者提供的一个强大的开发工具,它包含了...

    Android-资源文件动态更新管理框架

    在Android应用开发中,资源文件动态更新管理框架是至关重要的,它允许开发者在应用发布后仍然可以对资源进行更新,而无需用户重新安装应用。这种技术对于提供持续优化用户体验、修复错误、添加新功能或者更新内容如...

    Android读取SMB服务器资源或者下载资源文件

    本文将详细介绍如何在Android应用中实现这一功能。 首先,我们需要了解SMB库在Android中的应用。由于Android原生不支持SMB协议,我们需要借助第三方库,如jcifs-ng或smbj。这两个库都是Java实现的SMB客户端,可以很...

    Android 读写文件实例

    本文将详细讲解如何在Android系统中进行SD卡和内部存储的读写,以及如何获取文件目录。 ### 1. Android权限管理 在开始文件操作之前,必须在AndroidManifest.xml文件中声明相应的权限,特别是对于读写外部存储(SD...

    Android中使用xml文件定义颜色资源.pdf

    定义了颜色资源后,我们可以在布局文件或其他XML资源文件中引用它们。例如,如果你有一个Button需要使用上面定义的`my_color_name`颜色,你可以在`button`的`android:background`属性中这样引用: ```xml android...

    文件复制及进度条 android 文件复制 进度条 progressdialog

    下面将详细介绍如何在Android中实现文件复制以及在复制过程中显示`ProgressDialog`。 首先,让我们来看看文件复制的过程。在Android中,你可以使用Java的I/O流来实现文件复制。以下是一个基本的文件复制方法: ```...

    Android 之 将RAW资源文件写入SD卡工具类

    在Android开发中,有时我们需要将应用内部的RAW资源文件复制到外部存储(如SD卡)以便于用户访问或保存数据。这个"Android之将RAW资源文件写入SD卡工具类"是一个实用的功能,可以帮助开发者轻松完成这个任务。下面将...

    android 更新文件

    "android 更新文件"这个主题主要涉及到如何在Android应用程序中有效地管理和更新资源文件,比如通过AssetsManager进行操作。AssetsManager是Android SDK提供的一种用于访问应用非流式内容的类,它通常用来读取应用...

    Android 文件资源管理器源码

    在Android平台上,文件资源管理器是一个非常重要的工具,它允许用户查看、操作和管理设备上的文件和目录。这里我们关注的是"Android 文件资源管理器2.0"的源码,这是一个包含两个主要模块的实现:文件管理和任务管理...

    Android12系统资源目录分析树状图pdf(使用xmind思维导图软件绘画,导出pdf文件,此是压缩包文件,需解压)

    自己整理的Android12版本的系统资源目录分析,包括各个目录对应的分支 art: Android Runtime,一种App运行模式,区别于传统的Dalvik虚拟机,旨在提高Android系统的流畅性.PDF bionic:系统C库源代码,Android改造的C...

    Android文件管理器源码

    Android文件管理器(增加了文件夹复制移动,下载资源暂停删除等,以及复制过程中的可视化进程)是一个基于Android开发的应用,包含常用文件操作以及文件下载功能,文件操作包括打开文件夹和打开各类的文件(apk、avi...

    Android颜色资源文件

    很全面的颜色相应代码资源文件,复制内容到colors.xml文件即可使用,方便使用

    Android资源文件详解.pdf

    本篇主要介绍Android资源文件的使用和引用方式。 首先,资源文件通常存储在项目的`res`目录下,按照不同的资源类型划分为多个子目录,如`values`、`drawable`、`anim`等。在`values`目录下,我们可以创建XML文件来...

    获取android中String资源文件

    Android项目中,通过这个类可以获取资源文件中String.xml中的信息,

    android apk 反编译java文件对应的资源批量修改(更改为R.java文件中的R.string.name格式)

    本文将反编译apk的java文件和资源文件重新关联引用对应,使得java文件能准确无误地重新引用资源文件。 (1)将反编译出的资源文件拷进studio中建项目,此时拷入的资源文件在R.java中会注册上; (2)从反编译出的...

Global site tag (gtag.js) - Google Analytics