第三章: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_name

2、原始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();}}
原创粉丝点击