Android资源访问(超级详细.精华)
来源:互联网 发布:2016淘宝茶叶店铺排名 编辑:程序博客网 时间:2024/04/29 09:07
一、资源访问:
(一)、概念:
Android中的资源是指可以在代码中使用的外部文件,这些文件作为应用程序的一部分,被编译到应用程序中。在项目中,这些资源被保存到Android应用的res目录下。
(二)、资源分类:
id;
字符串资源文件;
颜色资源
尺寸资源文件
布局资源
数组资源
样式和主题资源
菜单资源
已编译的任意XML资源文件【重要】: res/xml
未编译的原始资源文件: res/raw
图像(Drawable)资源
普通图像资源
xml图像资源:bitmap
图层(Layer)资源:layer-list , item
图像选择器:图像状态(State)资源:selector , item
图像级别(Level)资源:level-list , item
淡入淡出(CrossFade)资源:transition , item(只支持两个)
外形(Shape)资源:shape(shape , gradient , padding ,corners , stroke)
动画资源
逐帧动画: res/anim animation-list , item
补间动画: res/anim
透明度补间动画 alpha
缩放补间动画 scale
旋转补间动画 rotate
移动补间动画 translate
属性动画:res/animator
【备注:】资源编译器会编译除了raw资源以外的所有资源,并将它们全部放到最终的.apk文件中。apk(Android Package)包含Android应用程序的代码和资源。
attr资源:自定义View
(三)、各种资源文件的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"Java文件中获取方式:getResources().getColor(R.color.blue);
3、尺寸资源文件:
示例代码:
<resources> <dimen name="title">20dp</color> <dimen name="content">10dp</color> </resources>Java文件中获取方式:getResources().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 name="choiceItems"> <item >主屏模式</item> <item >wifi设置</item> <item >蓝牙设置</item> <item >网络设置</item> <item >More</item> </string-array></resources>Java文件中获取方式:getResources().getStringArray(R.array.choiceItems);【备注:】如果是int型数组,则格式如下:<resources> <**integer-array** name="age"> <item >20</item> <item >30</item> <item >40</item> <item >50</item> </integer-array></resources>Java文件中获取方式:getResources().getIntArray(R.array.age);【备注:】如果是资源数组资源,则格式如下:<resources> <array name="icons"> <item >@drawable/home</item> <item >@drawable/setting</item> <item >@drawable/logout</item> </array> <array name="title"> <item >首页</item> <item >设置</item> <item >退出</item> </array></resources>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<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);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
<bitmapandroid: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"><itemandroid:top="10dp"android:left="10dp"><bitmapandroid:src="@drawable/android1"android:gravity="center"/></item><itemandroid:top="10dp"android:left="10dp"><bitmapandroid: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代码:<?xmlversion="1.0"encoding="utf-8"?><level-listxmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:drawable="@drawable/lamp_off"android:minLevel=“5" android:maxLevel="10"/><itemandroid:drawable="@drawable/lamp_on"android:minLevel=“11" android:maxLevel="20"/></level-list>//java代码:publicclass LevelActivity extends Activity {private ImageView imageview_lamp;@Overrideprotectedvoid 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"><!-- transition标签中只能有两个item标签,也就是只支持两个图像的切换 --><itemandroid:drawable="@drawable/lamp_off"/><itemandroid:drawable="@drawable/lamp_on"/></transition>//java代码:publicclass CrossfadeActivity extends Activity {private ImageView imageview_lamp;private TransitionDrawable drawable = null;@Overrideprotectedvoid 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"?><shapexmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle”><!-- shape有四个值:rectangle(矩形)、oval(椭圆)、line(直线)、ring(圆环)--><!-- 定义渐变色 ,从左下角到右上角绘制渐变色--><gradientandroid:startColor="#FF00"android:endColor="#80FF00FF"android:angle="45"/><!-- 定义控件内容到边界的距离--><paddingandroid:left="20dp"android:top="20dp"android:right="20dp"android:bottom="20dp"/><!-- 定义边框线的宽度及颜色--><strokeandroid:width="2dp"android:color="#00F"/><!-- 定义圆角半径--><cornersandroid:radius="8dp"/></shape>
- Android资源访问(超级详细.精华)
- (详细)Android资源访问
- Android studio上传项目到gitHub(超级详细)
- Android 中的资源访问(简介/颜色)
- 访问android资源
- android 资源访问
- android 访问图片资源
- android资源访问
- Android 中的资源访问
- Android中的资源访问
- Android应用程序资源访问
- android资源访问机制
- Android资源访问
- Android访问资源
- Android资源访问机制
- Android中的资源访问
- Android资源访问
- Android app访问资源
- 50个 小故事
- LeetCode||2.Add Two Numbers
- 超级跑车法拉利的历史
- linux+tomcat无法显示图片验证码
- WSDL(Web服务描述语言)创建JavaBean
- Android资源访问(超级详细.精华)
- 机器学习分类篇-决策树
- 【leetcode】121. Best Time to Buy and Sell Stock
- CentOS忘记密码之后的修改
- Linux中变量#,@,0,1,2,*,$$,$?的含义
- MATLAB利用cat函数拼接矩阵
- 10.9学习总结
- last
- 逻辑地址、虚拟地址、物理地址以及内存管理