android中的资源访问
一.android中的资源是在代码中使用的外部文件。图片,音频,动画和字符串等叫做android中的资源文件。
二.Android工程 资源类型布局表
与src源文件夹并列的两个文件夹assets和res用来保存资源文件。
1.assets文件夹中放原声文件如MP3文件,通过AssetManager类以二进制流的形式访问
2.res中资源可以通过R资源类直接访问:
anim:保存动画
drawable:位图文件
layout:xml布局文件
values:各种xml资源文件
arrays.xml:xml数组文件
colors.xml:xml颜色文件
dimens.xml:xml尺寸文件
styles.xml:xml样式文件
raw:直接复制到设备中的源文件
menu:xml菜单文件
使用mContext.getResources()得到Resources对象来获取资源
XML的写法如下:
- 代码
- 一个android工程中,有各种类型的资源文件,大致可以分为以下几种:
- 、颜色#RGB#ARGB#RRGGBB#AARRGGBB
- 颜色资源应该位于<resourses></resourses>标签下
- 路径res/values/colors.xml名字可以随意
- 定义<colorname=”cname”>value</color>
- 使用Resourse.getValues.getColor
- <?xmlversion="1.0"encoding="utf-8"?>
- <resources>
- <colorname="white">#FFFFFF</color>
- <colorname="black">#000000</color>
- </resources>
- 、字串
- 字串资源应该位于<resourses></resourses>标签下
- 路径res/values/strings.xml
- 定义<Stringname=”sname”>value</String>
- 使用Resourse.getValues.getString
- <?xmlversion="1.0"encoding="utf-8"?>
- <resources>
- <stringname="hello">HelloWorld,ResrouseTestActivity!</string>
- <stringname="app_name">ResrouseTest</string>
- </resources>
- 、图片
- 图片资源一般使用png格式,使用其他格式的会出现各种问题,貌似不支持gif格式的图片,可是使用Movie来播放gif格式的图片
- 路径res/drawable
- 可以直接存放图片也可以是xml等配置文件(一般用于自定义组件)
- 使用getDrawable
- 、图片的颜色
- 位于res/values/my_drawable.xml名字随意
- <?xmlversion="1.0"encoding="utf-8"?>
- <resources>
- <drawablename="solid_red">#FF0000</drawable>
- </resources>
- 定义用于填充一个组件的颜色值,即给view设置背景色。用法和drawable下的图片一样,其实没多少意义,使用颜色定义就ok了,目前我是这样认为的,可能有更好的优点,不过我没发现罢了,嘿嘿,continue...
- 、单位资源
- 单位资源应该位于<resourses></resourses>标签下
- 路径res/values/dimen.xml名字可以随意
- 使用和String、color类似
- <?xmlversion="1.0"encoding="utf-8"?>
- <resources>
- <dimenname="dimen_name">2px</dimen>
- <dimenname="dimen_px">5px</dimen>
- <dimenname="dimen_pt">3pt</dimen>
- <dimenname="dimen_dp">3dp</dimen>
- </resources>
- 、Nine-patch(可以拉伸的小图片)
- 支持图片的拉伸
- 貌似就是所谓的png图片文件资源,图片在应用view的背景时,如果被设为background则会随view的大小变化做相应的拉伸和收缩,像ImageView这类设置src图片则不随view变化,按其自身大小显示部分或全部!
- 、菜单
- 菜单即可以从代码中实现也可以在资源文件中配置,这里就是要描述一下第二种<?xmlversion="1.0"encoding="utf-8"?><menuxmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:id="@+id/previous"android:title="@string/previous"android:enabled="false"android:icon="@android:drawable/ic_media_previous"/><itemandroid:id="@+id/play_pause"android:title="@string/play"android:icon="@android:drawable/ic_media_play"/><itemandroid:id="@+id/next"android:title="@string/next"android:icon="@android:drawable/ic_menu_next"/></menu>8、Layout布局
- 这个就是你经常看到的与用户交互的界面的xml文件,就是各个view的排列和嵌套,没什么好说的啦
- 、风格和主题、
- 风格主要是指view的显示风格res/values/filename.xml
- <?xmlversion=”1.0″encoding=”utf-8″?>
- <resources>
- <stylename=”SpecialText”parent=”@style/Text”>
- <itemname=”android:textSize”>18sp</item>
- <itemname=”android:textColor”>#008</item>
- </style>
- </resources>
- 主题主要针对Activity等,可以在AndroidManifest中定义的<application>和<activity>元素将主题添加到整个程序或者某个Activity,但是主题是不能应用在某一个单独的View里.风格可以自己定义也可以使用程序自带的或是继承已有的风格。
- <?xmlversion="1.0"encoding="utf-8"?><resources><stylename="CustomTheme"><itemname="android:windowNoTitle">true</item><itemname="windowFrame">@drawable/screen_frame</item><itemname="windowBackground">@drawable/screen_background_white</item><itemname="panelForegroundColor">#FF000000</item><itemname="panelBackgroundColor">#FFFFFFFF</item><itemname="panelTextColor">?panelForegroundColor</item><itemname="panelTextSize">14</item><itemname="menuItemTextColor">?panelTextColor</item><itemname="menuItemTextSize">?panelTextSize</item></style></resources>
- 、动画
- 动画资源分为两种,一是实现图片的translate、scale、rotate、alpha四种变化。还可以设置动画的播放特性;另一种是帧动画,逐帧播放设置的资源
- 先说一下第一种
- Res/anim/filename.xml<setxmlns:android="http://schemas.android.com/apk/res/android"><translateandroid:interpolator="@android:anim/accelerate_interpolator"android:fromXDelta="0"android:toXDelta="200"android:fromYDelta="0"android:toYDelta="180"android:duration="2000"/><scaleandroid:interpolator="@android:anim/accelerate_interpolator"android:fromXScale="1.0"android:toXScale="2.0"android:fromYScale="1.0"android:toYScale="2.0"android:pivotX="150%"android:pivotY="150%"android:duration="2000"/><alphaandroid:fromAlpha="1.0"android:toAlpha="1.0"android:duration="@android:integer/config_mediumAnimTime"/><rotate....各个属性></rotate><Interpolator>可以使用其子类和属性定义动画的运行方式,先快后慢,先慢后快等</Interpolator></set>具体参数的用法,大家可以自己查资料
- 下面是第二种资源
- <animation-listxmlns:android=”http://schemas.android.com/apk/res/android”
- android:oneshot=”true”>
- <itemandroid:drawable=”@drawable/rocket_thrust1″android:duration=”200″/>
- <itemandroid:drawable=”@drawable/rocket_thrust2″android:duration=”200″/>
- <itemandroid:drawable=”@drawable/rocket_thrust3″android:duration=”200″/>
- </animation-list>
- <scriptsrc="/javascripts/tinymce/plugins/javaeye/langs/zh.js"type="text/javascript"></script>rif;">1.相关文件夹介绍在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的。assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件被预编译,可以存放一些图片,html,js,css等文件。在后面会介绍如何读取assets文件夹的资源!
代码示例
/Chapter03_Resource/src/com/amaker/test/MainActivity.java
- 代码
- packagecom.amaker.test;
- importandroid.app.ListActivity;
- importandroid.content.Intent;
- importandroid.os.Bundle;
- importandroid.view.View;
- importandroid.widget.ArrayAdapter;
- importandroid.widget.ListView;
- importcom.amaker.ch03.color.TestColorActivity;
- importcom.amaker.ch03.dimen.TestDimensionActivity;
- importcom.amaker.ch03.drawable.TestBitmapActivity;
- importcom.amaker.ch03.layout.TestLayoutActivity;
- importcom.amaker.ch03.menu.TestMenuActivity;
- importcom.amaker.ch03.string.TestStringActivity;
- importcom.amaker.ch03.xml.TestXmlActivity;
- publicclassMainActivityextendsListActivity{
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- //菜单项数组
- String[]items={"TestColor","TestString","TestDimension","TestXML","TestBitmap","TestMenu","TestLayout"};
- //将菜单项数组设置为ListView的列表项展示
- setListAdapter(newArrayAdapter<String>(this,
- android.R.layout.simple_list_item_1,items));
- getListView().setTextFilterEnabled(true);
- }
- //响应菜单项的单击事件
- protectedvoidonListItemClick(ListViewl,Viewv,intposition,longid){
- Intentintent=null;
- switch(position){
- case0:
- intent=newIntent(MainActivity.this,TestColorActivity.class);
- startActivity(intent);
- break;
- case1:
- intent=newIntent(MainActivity.this,TestStringActivity.class);
- startActivity(intent);
- break;
- case2:
- intent=newIntent(MainActivity.this,TestDimensionActivity.class);
- startActivity(intent);
- break;
- case3:
- intent=newIntent(MainActivity.this,TestXmlActivity.class);
- startActivity(intent);
- break;
- case4:
- intent=newIntent(MainActivity.this,TestBitmapActivity.class);
- startActivity(intent);
- break;
- case5:
- intent=newIntent(MainActivity.this,TestMenuActivity.class);
- startActivity(intent);
- break;
- case6:
- intent=newIntent(MainActivity.this,TestLayoutActivity.class);
- startActivity(intent);
- break;
- }
- }
- }
获取颜色资源
/Chapter03_Resource/src/com/amaker/ch03/color/TestColorActivity.java
- 代码
- packagecom.amaker.ch03.color;
- importandroid.app.Activity;
- importandroid.os.Bundle;
- importcom.amaker.test.R;
- publicclassTestColorActivityextendsActivity{
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.test_color);
- //引用颜色资源,设置背景色为红色
- getWindow().setBackgroundDrawableResource(R.color.red_bg);
- }
- }
/Chapter03_Resource/res/values/colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="red_bg">#f00</color>
<color name="blue_text">#0000ff</color>
</resources>
尺寸资源资源
/Chapter03_Resource/src/com/amaker/ch03/dimen/TestDimensionActivity.java
- 代码
- packagecom.amaker.ch03.dimen;
- importandroid.app.Activity;
- importandroid.content.res.Resources;
- importandroid.os.Bundle;
- importandroid.widget.Button;
- importcom.amaker.test.R;
- publicclassTestDimensionActivityextendsActivity{
- privateButtonmyButton;
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.test_dimen);
- myButton=(Button)findViewById(R.id.Button01);
- Resourcesr=getResources();
- floatbtn_h=r.getDimension(R.dimen.btn_height);
- floatbtn_w=r.getDimension(R.dimen.btn_width);
- myButton.setHeight((int)btn_h);
- myButton.setWidth((int)btn_w);
- }
- }
/Chapter03_Resource/res/values/dimens.xml
- 代码
- <?xmlversion="1.0"encoding="utf-8"?>
- <resources>
- <dimenname="text_width">150px</dimen>
- <dimenname="text_height">100px</dimen>
- <dimenname="btn_width">30mm</dimen>
- <dimenname="btn_height">10mm</dimen>
- </resources>
Bitmap资源
/Chapter03_Resource/src/com/amaker/ch03/drawable/TestBitmapActivity.java
- 代码
- packagecom.amaker.ch03.drawable;
- importandroid.app.Activity;
- importandroid.content.res.Resources;
- importandroid.graphics.drawable.Drawable;
- importandroid.os.Bundle;
- importandroid.widget.ImageView;
- importcom.amaker.test.R;
- publicclassTestBitmapActivityextendsActivity{
- privateImageViewmyImageView;
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.test_bitmap);
- myImageView=(ImageView)findViewById(R.id.bitmapImageView02);
- Resourcesr=getResources();
- Drawabled=r.getDrawable(R.drawable.moto);
- myImageView.setImageDrawable(d);
- }
- }
/Chapter03_Resource/res/drawable
布局资源
/Chapter03_Resource/src/com/amaker/ch03/layout/TestLayoutActivity.java
- 代码
- packagecom.amaker.ch03.layout;
- importandroid.app.Activity;
- importandroid.os.Bundle;
- importandroid.widget.Button;
- importandroid.widget.EditText;
- importandroid.widget.TextView;
- importcom.amaker.test.R;
- publicclassTestLayoutActivityextendsActivity{
- privateTextViewmyTextView;
- privateEditTextmyEditText;
- privateButtonmyButton;
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.test_layout);
- myTextView=(TextView)findViewById(R.id.layoutTextView01);
- myEditText=(EditText)findViewById(R.id.layoutEditText01);
- myButton=(Button)findViewById(R.id.layoutButton01);
- }
- }
/Chapter03_Resource/res/layout/test_layout.xml
- 代码
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <!--以上四个属性分别是:命名空间、组件布局方向(这里是垂直)、布局的宽(充满屏幕)和高(充满屏幕)-->
- <!--以下嵌套一个TableLayout-->
- <TableLayout
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:stretchColumns="1">
- <TableRow>
- <TextView
- android:text="测试Layout:"
- android:id="@+id/layoutTextView01"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textColor="@color/red_bg"/>
- <!--以上五个属性分别是:文本内容、引用组件的ID、该组件的宽(内容的宽)、该组件的高(内容的高)、文件颜色-->
- <EditText
- android:text=""
- android:id="@+id/layoutEditText01"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"/>
- </TableRow>
- <TableRowandroid:gravity="right">
- <Button
- android:text="Test"
- android:id="@+id/layoutButton01"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
- </TableRow>
- </TableLayout>
- </LinearLayout>
菜单资源
/Chapter03_Resource/src/com/amaker/ch03/menu/TestMenuActivity.java
- 代码
- packagecom.amaker.ch03.menu;
- importandroid.app.Activity;
- importandroid.app.AlertDialog;
- importandroid.content.DialogInterface;
- importandroid.os.Bundle;
- importandroid.view.Menu;
- importandroid.view.MenuInflater;
- importandroid.view.MenuItem;
- importcom.amaker.test.R;
- publicclassTestMenuActivityextendsActivity{
- privateMenuInflatermi;
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.test_menu);
- mi=newMenuInflater(this);
- }
- /*
- *创建菜单
- */
- publicbooleanonCreateOptionsMenu(Menumenu){
- mi.inflate(R.menu.file_menu,menu);
- returntrue;
- }
- @Override
- publicbooleanonOptionsItemSelected(MenuItemitem){
- switch(item.getItemId()){
- caseR.id.about:
- aboutAlert("本实例演示的是如何使用XML菜单资源来定义菜单!");
- break;
- caseR.id.exit:
- exitAlert("真的要退出吗?");
- break;
- }
- returntrue;
- }
- //显示对话框
- privatevoidexitAlert(Stringmsg){
- AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
- builder.setMessage(msg)
- .setCancelable(false)
- .setPositiveButton("确定",newDialogInterface.OnClickListener(){
- publicvoidonClick(DialogInterfacedialog,intid){
- finish();
- }
- }).setNegativeButton("取消",newDialogInterface.OnClickListener(){
- publicvoidonClick(DialogInterfacedialog,intid){
- return;
- }
- });
- AlertDialogalert=builder.create();
- alert.show();
- }
- //显示对话框
- privatevoidaboutAlert(Stringmsg){
- AlertDialog.Builderbuilder=newAlertDialog.Builder(this);
- builder.setMessage(msg)
- .setCancelable(false)
- .setPositiveButton("确定",newDialogInterface.OnClickListener(){
- publicvoidonClick(DialogInterfacedialog,intid){
- }
- });
- AlertDialogalert=builder.create();
- alert.show();
- }
- }
/Chapter03_Resource/res/layout/test_menu.xml
- 代码
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <TextView
- android:text="测试菜单资源"
- android:id="@+id/menuTextView01"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"></TextView>
- </LinearLayout>
字符串资源
/Chapter03_Resource/src/com/amaker/ch03/string/TestStringActivity.java
- 代码
- packagecom.amaker.ch03.string;
- importandroid.app.Activity;
- importandroid.os.Bundle;
- importandroid.widget.TextView;
- importcom.amaker.test.R;
- publicclassTestStringActivityextendsActivity{
- privateTextViewmyTextView;
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.test_string);
- myTextView=(TextView)findViewById(R.id.myTextView02);
- Stringstr=getString(R.string.test_str2).toString();
- myTextView.setText(str);
- }
- }
/Chapter03_Resource/res/layout/test_string.xml
- 代码
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <TextView
- android:text="@string/test_str1"
- android:id="@+id/myTextView01"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
- <TextView
- android:text=""
- android:id="@+id/myTextView02"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
- </LinearLayout>
xml资源
- 代码
- packagecom.amaker.ch03.xml;
- importjava.io.IOException;
- importorg.xmlpull.v1.XmlPullParser;
- importorg.xmlpull.v1.XmlPullParserException;
- importandroid.app.Activity;
- importandroid.content.res.Resources;
- importandroid.content.res.XmlResourceParser;
- importandroid.os.Bundle;
- importandroid.view.View;
- importandroid.view.View.OnClickListener;
- importandroid.widget.Button;
- importandroid.widget.TextView;
- importcom.amaker.test.R;
- publicclassTestXmlActivityextendsActivity{
- privateTextViewmyTextView;
- privateButtonmyButton;
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- setContentView(R.layout.test_xml);
- myTextView=(TextView)findViewById(R.id.xmlContentTextView01);
- myButton=(Button)findViewById(R.id.xmltTestButton01);
- myButton.setOnClickListener(newOnClickListener(){
- @Override
- publicvoidonClick(Viewv){
- intcounter=0;
- StringBuildersb=newStringBuilder("");
- Resourcesr=getResources();
- XmlResourceParserxrp=r.getXml(R.xml.test);
- try{
- while(xrp.getEventType()!=XmlResourceParser.END_DOCUMENT){
- if(xrp.getEventType()==XmlResourceParser.START_TAG){
- Stringname=xrp.getName();
- if(name.equals("customer")){
- counter++;
- sb.append("第"+counter+"条客户信息:"+"\n");
- sb.append(xrp.getAttributeValue(0)+"\n");
- sb.append(xrp.getAttributeValue(1)+"\n");
- sb.append(xrp.getAttributeValue(2)+"\n");
- sb.append(xrp.getAttributeValue(3)+"\n\n");
- }
- }elseif(xrp.getEventType()==XmlPullParser.END_TAG){
- }elseif(xrp.getEventType()==XmlPullParser.TEXT){
- }
- xrp.next();
- }
- myTextView.setText(sb.toString());
- }catch(XmlPullParserExceptione){
- e.printStackTrace();
- }catch(IOExceptione){
- e.printStackTrace();
- }
- }
- });
- }
- }
- 代码
- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <Button
- android:text="获得XML内容"
- android:id="@+id/xmltTestButton01"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"></Button>
- <TextView
- android:text=""
- android:id="@+id/xmlContentTextView01"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
- </LinearLayout>
更多相关文章
- NPM 和webpack 的基础使用
- 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
- android 在myeclipse中查看源码
- adb shell 命令详解
- android工程gen目录无法生成的解决办法汇总
- 使用Android内部的DownloadProvider下载文件,并获取cache权限
- YUV420P、YUV420SP、NV12、NV21和RGB互相转换并存储为JPEG以及PN
- android四层框架
- Android(安卓)轻松实现语音朗读