一、资源访问:【掌握】

(一)、概念:

    Android中的资源是指可以在代码中使用的外部文件,这些文件作为应用程序的一部分,被编译到应用程序中。在项目中,这些资源被保存到Android应用的res目录下。

(二)、资源分类:

id;

字符串资源文件;

颜色资源

尺寸资源文件

布局资源

数组资源

样式和主题资源

菜单资源

原始XML资源【重要】: res/xml

原生文件资源: res/raw

图像(Drawable)资源

  1. 普通图像资源
  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)
  1. 动画资源
  1. 属性动画:res/animator   (api11之后出现)   
  2. 帧动画: res/anim      animation-list , item
  3. 补间动画:  res/anim
  • 透明度补间动画
  • 缩放补间动画
  • 旋转补间动画
  • 移动补间动画

(三)、各种资源文件的xml格式:

1、字符串资源文件:

示例代码:

<resources>

<string  name="red">红色</color>

<string  name="green">绿色</color>

<string  name="blue">蓝色</color>

  </resources>

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

2、颜色资源文件:

示例代码:

<resources>
 
     
<color name="red">#f00</color>
 
     
<color name="green">#0f0</color>
 
     
<color name="blue">#00f</color>
 
     
  </resources>

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

getResources().getColor(R. color.blue_half);

3、尺寸资源文件:

示例代码:

<resources>
 
       
<dimen  name="title">20dp</color>
 
       
<dimen  
         name="content">10dp</color>
 
       
  </resources>
 
      
 
      
getDimension(R. 
       dimen.title);

4、数组资源文件:

    Android中,不推荐将数组直接定义在java文件中,而是使用数组资源文件来定义数组。

    定义在res下values目录下:arrays.xml文件中。格式如下:

  • 根元素:<resources></resources>
  • 子元素:可以有三种。
  • <array></array>:称为类型数组Typed-Array资源(或者:资源数组资源)
  • <string-array></string-array>
  • <integer-array></integer-array>
  • 下级子元素:<item>数值</item>

示例代码:

<resources>
 
            
string-array
 
            
item >主屏模式</item>
 
            
        <item >wifi设置</item>
 
            
        <item >蓝牙设置</item>
 
            
        <item >网络设置</item>
 
            
        <item >More</item>
 
            
    </string-array>
 
            
</resources>
 
            
 
           
getResources().getStringArray(R. 
            array.choiceItems);

【备注:】如果是int型数组,则格式如下:

<resources>
 
            
integer-array
 
            
        <item >20</item>
 
            
        <item >30</item>
 
            
        <item >40</item>
 
            
        <item >50</item>
 
            
    </integer-array>
 
            
</resources>
 
            
 
           
getResources().getIntArray(R. 
            array.age);

【备注:】如果是资源数组资源,则格式如下:

<resources>
 
          
array
 
          
        <item >@drawable/home</item>
 
          
        <item >@drawable/setting</item> 
          
 
          
        <item >@drawable/logout</item> 
          
 
          
    </array>
 
          
array
 
           
        <item >首页</item>
 
           
        <item >设置</item> 
           
 
           
        <item >退出</item> 
           
 
           
    </array>
 
          
</resources>

Java文件中获取方式:

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<Map<String, Object>> parseXML(XmlResourceParser pullParser,
                        String tagName) {
                List<Map<String, Object>> list = null;
                Map<String, Object> 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<Map<String, Object>>();
                                        break;
                                // 根据节点的不同来执行实例化map和往map中添加数据的操作
                                case XmlPullParser.START_TAG:
                                        if (nodeName.equals(tagName)) {
                                                map = new HashMap<String, Object>();
                                                // 本例中,没有文本节点,有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);

B、xml图像资源: bitmap

<bitmap 

      android:src="@drawable/android1"

     android:gravity="center" />

C、图层(Layer)资源: layer-list

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

<layer-list xmlns: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

<?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/pressed" />

    <item android:state_focused="true"

          android:drawable="@drawable/focused" /> 

    <item android:drawable="@drawable/normal" /> 

</selector>

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

//UI代码:
<?xml version="1.0" encoding="utf-8"?>

<level-list xmlns: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代码:
public class LevelActivity extends Activity {

  private ImageView imageview_lamp;




       @Override

   protected void onCreate(Bundle savedInstanceState) {

           super.onCreate(savedInstanceState);

           setContentView(R.layout.activity_level);

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

   }




   public void 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

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

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

    <!-- transition标签中只能有两个item标签,也就是只支持两个图像的切换 -->

        <item android:drawable="@drawable/lamp_off" />

        <item android:drawable="@drawable/lamp_on" />

</transition>


//java代码:
public class CrossfadeActivity extends Activity {

  private ImageView imageview_lamp;

   private TransitionDrawable drawable = null;




       @Override

   protected void onCreate(Bundle savedInstanceState) {

           super.onCreate(savedInstanceState);

           setContentView(R.layout.activity_crossfade);

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




           drawable = (TransitionDrawable) imageview_lamp.getDrawable();

   }




   public void 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

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

<shape 

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

    android:shape="rectangle”>


   <!-- shape有四个值:rectangle(矩形)、oval(椭圆)、line(直线)、ring(圆环)-->

       <!-- 定义渐变色 ,从左下角到右上角绘制渐变色-->

       <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>