Android06_Android资源访问

Android资源访问


一、资源访问:【掌握】
(一)、概念:
    Android中的资源是指可以在代码中使用的外部文件,这些文件作为应用程序的一部分,被编译到应用程序中。在项目中,这些资源被保存到Android应用的res目录下。

(二)、资源分类:
  1. id
  2. 字符串资源文件
  3. 颜色资源
  4. 尺寸资源文件
  5. 布局资源
  6. 数组资源
  7. 样式和主题资源
  8. 菜单资源
  9. 已编译的任意XML资源文件【重要】: res/xml
  10. 未编译的原始资源文件: res/raw
  11. 图像(Drawable)资源
    1. 普通图像资源:.png之类的
    2. xml图像资源:bitmap
    3. 图层(Layer)资源:layer-list , item
    4. 图像状态(State)资源:selector , item
    5. 图像级别(Level)资源:level-list , item
    6. 淡入淡出(CrossFade)资源:transition , item(只支持两个)
    7. 外形(Shape)资源:shape(shape , gradient , padding ,corners , stroke)
  12. 动画资源
    1. 属性动画:res/animator   (api11之后出现)   
    2. 逐帧动画: res/anim      animation-list , item
    3. 补间动画:  res/anim
      • 透明度补间动画    alpha
      • 缩放补间动画    scale
      • 旋转补间动画    rotate
      • 移动补间动画     translate
【备注:】资源编译器会编译除了raw资源以外的所有资源,并将它们全部放到最终的.apk文件中。apk(Android Package)包含Android应用程序的代码和资源。
(三)、各种资源文件的xml格式:
1、字符串资源文件:
示例代码:

<string  name="red">红色
绿色
蓝色
 

Java文件中获取方式:getResources().getString(R.string.red);


2、颜色资源文件:
示例代码:
 
      
    <color name="red">#f00
    #0f0
    #00f
 

在需要调用该颜色的地方写法是:android:background="@color/blue"

Java文件中获取方式:  getResources().getColor(R.  color.blue);


3、尺寸资源文件:
示例代码:
 
       
    <dimen  name="title">20dp
    <dimen    name="content">10dp
 

Java文件中获取方式:getResources().  getDimension(R.  dimen.title);


4、数组资源文件:
    Android中,不推荐将数组直接定义在java文件中,而是使用数组资源文件来定义数组。
    定义在res下values目录下:arrays.xml文件中。格式如下:
  • 根元素:<resources>
  • 子元素:可以有三种
    • :称为类型数组Typed-Array资源(或者:资源数组资源
  • 下级子元素:数值

示例代码:
 
          
    <string-array name="choiceItems"> 
        <item >主屏模式
        wifi设置
        蓝牙设置
        网络设置
        More
   

Java文件中获取方式:  getResources().getStringArray(R.  array.choiceItems);

【备注:】如果是int型数组,则格式如下:
    <integer-array name="age"> 
        20
        30
        40
        50
   

Java文件中获取方式:  getResources().getIntArray(R.  array.age);

【备注:】如果是资源数组资源,则格式如下:
    <array name="icons"> 
        @drawable/home
        @drawable/setting
        @drawable/logout
   
    <array name="title"> 
        首页
        设置
        退出
   

Java文件中获取方式:
TypedArray  arrIcons =   getResources().obtainTypedArray(R.array.icons);
Drawable drawable = arrIcons.getDrawable(0);


5、原始XML资源【  重要   
  • 位置:res/xml目录下;
  • 定义格式:格式良好的,没有特殊要求的普通xml文件;
  • Java文件中获取方式:getResources().getXml(R.xml.文件名称);
  • 解析xml的核心代码:
 // 从资源文件夹中读取原始xml资源文件 XmlResourceParser pullParser = getResources().getXml(R.xml.citylist);
 //将读取xml资源文件返回的XmlResourceParser 对象继续解析,获取到xml节点中需要的数据。
 //备注:XmlResourceParser 类是XmlPullParser的子类
 public List> parseXML(XmlResourceParser pullParser, String tagName) { List> list = null; Map map = null; int event; try { // 根据读取的xml节点来获取事件类型 event = pullParser.getEventType(); // 只要不是文档结束就一直执行循环 while (event != XmlPullParser.END_DOCUMENT) { // 获取每个节点的节点名称 String nodeName = pullParser.getName(); // 根据事件类型来执行不同的操作 switch (event) { // 当文档开始就实例化list case XmlPullParser.START_DOCUMENT: list = new ArrayList>(); break; // 根据节点的不同来执行实例化map和往map中添加数据的操作 case XmlPullParser.START_TAG: if (nodeName.equals(tagName)) { map = new HashMap(); // 本例中,没有文本节点,有n个属性节点,而所需要的内容全在属性节点中。故使用getAttributeValue(index)方法 // getAttributeValue(index)方法中的 // index是指节点的索引下标,从0开始。可以理解成属性点 顺序。 map.put(pullParser.getAttributeValue(3), pullParser.getAttributeValue(2)); list.add(map); } break; } // 执行循环 event = pullParser.next(); } } catch (Exception e) { e.printStackTrace(); } return list; }


6、原生文件资源: raw

【备注:】raw目录下主要放置的资源有音频、视频等文件。raw目录下的文件会在R.java中被注册。
        如何访问raw目录下的文件?
        InputStream is = getResources().openRawResource(R.raw.文件名);


7、图像资源:
A、普通图像资源:

Java文件中获取方式:getResources().getDrawable(R.drawable.imagename);

int resId = getResources().getIdentifier(imgName, "drawable",  this.getPackageName());

view.getResources().getResourceName(resid)

int resId = context.getResources().getIdentifier("图片名称", "drawable", context.getPackageName()); 
imageView_main_showpic.setImageResource(resId);

B、xml图像资源:  bitmap

<bitmap

android:src="@drawable/android1"

android:gravity="center"/>
C、图层(Layer)资源:  layer-list

xmlversion="1.0"encoding="utf-8"?>

<layer-listxmlns:android="http://schemas.android.com/apk/res/android">

<item

android:top="10dp"

android:left="10dp">

<bitmap

android:src="@drawable/android1"

android:gravity="center"/>

item>

<item

android:top="10dp"

android:left="10dp">

<bitmap

android:src="@drawable/android2"

android:gravity="center"/>

item>

layer-list>


D、图像状态(State)资源:  selector

xmlversion="1.0"encoding="utf-8"?>
<selectorxmlns:android="http://schemas.android.com/apk/res/android">
<itemandroid:state_pressed="true"android:drawable="@drawable/pressed"/>
<itemandroid:state_focused="true"android:drawable="@drawable/focused"/>
<itemandroid:drawable="@drawable/normal"/>
selector>

E、图像级别(Level)资源:  level-list

//UI代码:
xmlversion="1.0"encoding="utf-8"?>

<level-listxmlns:android="http://schemas.android.com/apk/res/android">

<item

android:drawable="@drawable/lamp_off"

android:minLevel=5" android:maxLevel="10"/>

<item

android:drawable="@drawable/lamp_on"

android:minLevel=11" android:maxLevel="20"/>

level-list>




//java代码:
publicclass LevelActivity extends Activity {

private ImageView imageview_lamp;




@Override

protectedvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_level);

imageview_lamp = (ImageView) findViewById(R.id.imageview_lamp);

}




publicvoid clickButton(View view) {

switch (view.getId()) {

case R.id.button_level_lampoff:

imageview_lamp.setImageLevel(9);

break;

case R.id.button_level_lampon:

imageview_lamp.setImageLevel(15);

break;

default:

break;

}

}

}
F、淡入淡出(CrossFade)资源:  transition

xmlversion="1.0"encoding="utf-8"?>

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



<itemandroid:drawable="@drawable/lamp_off"/>

<itemandroid:drawable="@drawable/lamp_on"/>

transition>


//java代码:
publicclass CrossfadeActivity extends Activity {

private ImageView imageview_lamp;

private TransitionDrawable drawable = null;




@Override

protectedvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_crossfade);

imageview_lamp = (ImageView) findViewById(R.id.imageview_lamp);




drawable = (TransitionDrawable) imageview_lamp.getDrawable();

}




publicvoid clickButton(View view) {

switch (view.getId()) {

case R.id.button_level_lampon:

drawable.startTransition(3000);

break;

case R.id.button_level_lampoff:

drawable.reverseTransition(3000);

break;

default:

break;

}

}

}

G、外形(Shape)资源:  shape

xmlversion="1.0"encoding="utf-8"?>

<shape

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

android:shape="rectangle>






<gradient

android:startColor="#FF00"

android:endColor="#80FF00FF"

android:angle="45"/>





<padding

android:left="20dp"

android:top="20dp"

android:right="20dp"

android:bottom="20dp"/>





<stroke

android:width="2dp"

android:color="#00F"/>





<corners

android:radius="8dp"/>

shape>

(二)、如何访问raw目录下的文件?
    InputStream is = getResources().openRawResource(R.raw.文件名);

良心的公众号,更多精品文章,不要忘记关注哈

《Android和Java技术栈》



你可能感兴趣的:(Android学习之路)