第三章:Android中资源的访问
来源:互联网 发布:安装补丁的软件 编辑:程序博客网 时间:2024/05/16 13:06
一、资源简介
1、资源的类型和布局
目录结构资源类型res/anim/XML动画文件res/drawable/一些位图文件res/layout/XML布局文件res/values/各种XML资源文件
arrays.xml:XML数组文件
colors.xml:XML颜色文件
dimens.xml:XML尺寸文件
styles.xml:XML样式文件
res/xml/任意的XML文件res/raw/直接复制到设备中的原生文件res/menu/XML菜单文件2、资源文件的使用
1)、在代码中使用资源文件
setContentView(R.layout.test_xml); myTextView = (TextView) findViewById(R.id.xmlContentTextView01); myButton = (Button) findViewById(R.id.xmlTestButton01);
2)、在其他资源文件中引用资源文件
android:text="@string/hello" android:id="@+id/xmlTestButton01"
二、使用颜色(color)资源
1、颜色值定义。颜色值的定义是通过RGB三原色和一个alpha值来定义的。
2、颜色资源XML文件的定义
资源位置res/values/colors.xml颜色XML文件格式使用<?xml version="1.0" encoding="utf-8"?>
<resources>根元素
<color>子元素:<color name="red_bg">#f00</color>
获得颜色方法Resources.getColor()引用资源格式
Java代码中:R.color.color_name
XML文件中:@[package:]color/color_name
3、使用颜色资源
colors.xml
<resources> <color name="red_bg">#f00</color> <color name="blue_text">#0000ff</color></resources>
main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:text="测试颜色资源,红色背景,蓝色文字" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/blue_text" /></LinearLayout>
public class TestColorActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //引用颜色自愿,设置背景色为红色 getWindow().setBackgroundDrawableResource(R.color.red_bg); }}
三、使用字符串(string)资源
在代码中我们使用Context.getString()方法,通过传递资源ID参数来得到该字符串,也可以在其他资源文件中引用字符串资源,引用格式为:“@string/字符串资源名称”
1、字符串资源XML文件的定义
资源位置res/values/strings.xml字符串XML文件格式使用<?xml version="1.0" encoding="utf-8"?>
<resources>根元素
<string>子元素:<string name="test_str2">string_values</string>
获得字符串资源的方法Resources.getString()引用字符串资源的格式Java中代码:R.string.string_name
XML文件中:@[package:]string/string_name
2、字符串资源XML文件的使用
strings.xml
<resources> <string name="hello">Test Resources</string> <string name="test_str1">从代码中引用</string> <string name="test_str2">从资源文件中引用</string> </resources>
main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:text="@string/test_str1" android:id="@+id/myTestView01" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:text="@string/test_str2" android:id="@+id/myTestView02" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>
public class TestStringActivity extends Activity { private TextView myTestView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); myTestView = (TextView) findViewById(R.id.myTestView02); String str = getString(R.string.test_str2).toString(); myTestView.setText(str); }}
四、使用尺寸(dimen)资源
1、Android中支持的尺寸单位
单位表示单位名称单位说明px像素屏幕上的真实像素表示in英尺基于屏幕的物理尺寸mm毫米基于屏幕的物理尺寸pt点英尺的1 / 72dp和密度无关的像素相对屏幕物理密度的抽象单位sp和精度无关的像素和dp类似2、尺寸资源XML文件的定义
资源位置res/values/dimens.xml尺寸XML文件格式使用<?xml version="1.0" encoding="utf-8"?>
<resources>根元素
<dimen>子元素:<dimen name="text_width">150px</dimen>
获得尺寸资源的方法getResources.getDimension()引用尺寸资源的格式Java代码中:R.dimen.dimen_name
XML文件中:@[package:]dimen/dimen_name
3、尺寸资源XML文件的使用
dimens.xml
<resources> <dimen name="text_width">150px</dimen> <dimen name="text_height">100px</dimen> <dimen name="btn_width">30mm</dimen> <dimen name="btn_height">10mm</dimen></resources>
main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:text="@string/hello" android:id="@+id/myDimenTextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:width="@dimen/text_width" android:height="@dimen/text_height" android:background="@color/red_bg" /> <Button android:text="@string/test_dimen" android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>
public class TestDimensionActivity extends Activity { private Button myButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); myButton = (Button) findViewById(R.id.Button01); //获得Resources实例 Resources r = getResources(); //通过getDimension方法获得尺寸值 float btn_h = r.getDimension(R.dimen.btn_height); float btn_w = r.getDimension(R.dimen.btn_width); //设置按钮的宽和高 myButton.setHeight((int) btn_h); myButton.setWidth((int) btn_w); }}
五、使用原始XML资源
1、原始资源XML文件的定义
资源位置res/xml/test.xml(文件名称注意)原始XML文件格式使用<resources>根元素
<someElement>子元素:<someElement name=value />
子元素及属性名称任意
获得XML资源的方法getResources().getXml()引用XML资源的格式Java代码中:R.xml.xml_name2、原始XML文件的使用
test.xml
<resources> <customer name="tom" age="20" gender="male" email="tom@yahoo.com"></customer> <customer name="kite" age="22" gender="female" email="kite@yahoo.com"></customer></resources>
main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:text="获得XML内容" android:id="@+id/xmlTestButton01" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:text="" android:id="@+id/xmlContentTextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>
public class TestXmlActivity extends Activity { private TextView myTextView; private Button myButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); myTextView = (TextView) findViewById(R.id.xmlContentTextView01); myButton = (Button) findViewById(R.id.xmlTestButton01); myButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//定义计数器 int counter = 0; //实例化StringBuilder StringBuilder sb = new StringBuilder(""); //获得Resources实例 Resources r = getResources(); //通过Resources,获得XmlResourceParser实例 XmlResourceParser xrp = r.getXml(R.xml.customer); try { //如果没有到文件末尾继续循环while(xrp.getEventType() != XmlResourceParser.END_DOCUMENT){//如果是开始标签if(xrp.getEventType() == XmlResourceParser.START_TAG){//获得标签名称String name = xrp.getName();//判断标签名称是否等于customerif(name.equals("customer")){counter++;//获得标签属性追加到StringBuilder中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");}}//下一个标签xrp.next();}//将StringBuilder设置为TextView的文本myTextView.setText(sb.toString());} catch (XmlPullParserException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}); } }
六、使用drawaables资源
1、尺寸资源的定义和使用
资源位置res/drawable/file_name.png /file_name.jpg /file_name.gif获得位图资源的方法Resources.getDrawable()引用位图自愿的格式Java代码中:R.drawable.file_name
XML文件中:@[package:]drawable/file_name
main.xml<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:text="测试位图资源" android:id="@+id/bitmapTextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ImageView android:id="@+id/bitmapImageView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/sample_2" /> <ImageView android:id="@+id/bitmapImageView02" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout>
public class TestBitmapActivity extends Activity {private ImageView myImageView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);myImageView = (ImageView) findViewById(R.id.bitmapImageView02);Resources r = getResources();Drawable d = r.getDrawable(R.drawable.sample_4);myImageView.setImageDrawable(d);}}
七、使用布局(layout)资源
1、布局文件的定义
资源位置res/layout/my_layout.xml(文件名称任意)布局XMl文件格式使用<?xml version="1.0" encoding="utf-8"?>
<布局类 xmlns:android="http://schemas.android.com/apk/res/android" id="@+id/string_name"(属性)>
<视图组件或者其他嵌套布局类>
<requestFocus />
</布局类>
获得XML资源的方法Activity.setContentView()引用XML资源的格式Java代码中:R.layout.my_layout
XML文件中:@[package:]layout/my_layout
2、布局文件的使用main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <!-- 以上四个属性分别是命名空间、组件布局方向(垂直)、布局的宽(充满屏幕)、布局的高(充满屏幕) --> <!-- 以下嵌套一个TableLayout --> <TableLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:stretchColumns="1"> <TableRow> <TextView android:text="测试" android:id="@+id/layoutTextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@color/red_bg" /> <EditText android:text="" android:id="@+id/EditText01" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </TableRow> <TableRow android:gravity="right"> <Button android:text="Test" android:id="@+id/layoutButton01" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </TableRow> </TableLayout></LinearLayout>
public class TestLayoutActivity extends Activity {private TextView myTextView;private EditText myEditText;private Button myButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); myTextView = (TextView) findViewById(R.id.layoutTextView01); myEditText = (EditText) findViewById(R.id.EditText01); myButton = (Button) findViewById(R.id.layoutButton01); }}
八、使用菜单(menu)资源
Android中的菜单分为选项菜单、上下文菜单和子菜单,都可以在XML文件中声明定义,在代码中通过MenuInflater使用。
1、菜单资源文件的定义
典型菜单资源文件的结构是这样的:<menu>根元素,在<menu>根元素里面会嵌套<item>和<group>子元素,<item>元素中也可嵌套<menu>形成子菜单。
<menu>根元素没有属性,它包含<item>和<group>子元素。
<group>表示一个菜单组,相同的菜单组可以一起设置其属性,例如visible、enabled和checkable等。<group>元素的说明如下:
- id:唯一表示该菜单组的引用id
- menuCategory:对菜单进行分类,定义菜单的优先级,有效值为container、system、secondary、alternative
- orderInCategory:一个分类排序整数
- checkableBehavior:选择行为,单选、多选还是其他。有效值为none、all、single
- visible:是否可见,true或false
- enabled:是否可用,true或false
<item>表示菜单项,包含在<menu>或<group>中的有效属性。<item>元素的说明如下:
- id:唯一表示菜单的Id引用
- menuCategory:菜单分类
- orderInCategory:分类排序
- title:菜单标题字符串
- titleCondensed:浓缩标题,适合标题太长的时候使用
- icon:菜单的图标
- alphabeticShortcut:字符快捷键
- numericShortcut:数字快捷键
- checkable:是否可选
- checked:是否已经被选
- visible:是否可见
- enabled:是否可用
2、菜单资源文件的使用
file_menu.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:title="File" android:icon="@drawable/folder"> <menu> <group android:id="@+id/noncheckable_group" android:checkableBehavior="none"> <item android:id="@+id/newFile" android:title="New" android:alphabeticShortcut="n" /> <item android:id="@+id/openFile" android:title="Open" android:alphabeticShortcut="o" /> <item android:id="@+id/savefile" android:title="Save" android:alphabeticShortcut="s" /> </group> </menu> </item> <item android:title="Edit" android:icon="@drawable/edit"> <menu> <group android:id="@+id/edit_group" android:checkableBehavior="single"> <item android:id="@+id/cut" android:title="Cut" /> <item android:id="@+id/copy" android:title="Copy" /> <item android:id="@+id/past" android:title="Past" /> </group> </menu> </item> <item android:title="Help" android:icon="@drawable/help"> <menu> <group android:id="@+id/help_group"> <item android:id="@+id/about" android:title="About" /> <item android:id="@+id/exit" android:title="Exit" /> </group> </menu> </item> </menu>
main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:text="测试菜单资源" android:id="@+id/menuTextView01" android:layout_width="wrap_content" android:layout_height="wrap_content" /></LinearLayout>
public class TestMenuActivity extends Activity {private MenuInflater mi;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);//实例化MenuInflater对象mi = new MenuInflater(this);}/* * 创建菜单 * */@Overridepublic boolean onCreateOptionsMenu(Menu menu) {//调用MenuInflater的inflate方法,通过配置文件创建菜单mi.inflate(R.xml.file_menu, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {//显示关于对话框case R.id.about:aboutAlert("本实例演示的是如何使用XMl菜单资源来定义菜单");break;//显示退出对话框case R.id.exit:exitAlert("真的要退出吗?");break;}return true;}//显示对话框private void exitAlert(String msg){//实例化AlertDialog.BuilderAlertDialog.Builder builder = new AlertDialog.Builder(this);//设置显示信息builder.setMessage(msg).setCancelable(false)//确定按钮.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int id) {finish();}//取消按钮}).setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int id) {return;}});//创建对话框AlertDialog alert = builder.create();//显示对话框alert.show();}private void aboutAlert(String msg){AlertDialog.Builder builder = new AlertDialog.Builder(this);builder.setMessage(msg).setCancelable(false).setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int id) {}});AlertDialog alert = builder.create();alert.show();}}
- 第三章:Android中资源的访问
- android 中对Resources资源的访问
- Android中"访问资源"解析
- Android中访问资源的几种方式总结
- android中访问assets文件夹下的资源
- Android访问第三方资源通用接口(自我整理)
- Android第三方资源
- android之访问被保护的资源
- Android资源的组织与访问-笔记
- Android的assets文件夹资源访问
- Android 访问res目录下的资源
- android assets文件夹资源的访问
- Android assets文件夹资源的访问
- .NET中多线程的同步资源访问
- .NET中多线程的同步资源访问
- .NET中多线程的同步资源访问
- Java Web中资源的访问路径
- .NET中多线程的同步资源访问
- 管理员必备的20个Linux系统监控工具
- 痛苦的面试...
- 如何手工移动PE头
- City Horizon
- VC异常处理
- 第三章:Android中资源的访问
- QT设置标题栏左侧的ico图标和生成后的EXE文件图标的更换方法
- oracle数据库面试题目汇总
- iPhone 4S陷信号门:中移动频段被苹果阉割
- linux手动安装DB2及升级DB2
- HBase编程api介绍
- oracle 汇总
- 关于Makefile,Makefile.in,Makefile.am,Configure功能及相互关系的问题
- ruby安装mysql2遇到的问题及解决方法