第三章:Android中资源的访问

一、资源简介

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 / 72
dp和密度无关的像素相对屏幕物理密度的抽象单位
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() {
	@Override
	public 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();
						//判断标签名称是否等于customer
						if(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;
	@Override
	protected 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;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		//实例化MenuInflater对象
		mi = new MenuInflater(this);
	}
	
	/*
	 * 创建菜单
	 * */
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		//调用MenuInflater的inflate方法,通过配置文件创建菜单
		mi.inflate(R.xml.file_menu, menu);
		return true;
	}
	
	@Override
	public 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.Builder
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		//设置显示信息
		builder.setMessage(msg)
		.setCancelable(false)
		//确定按钮
		.setPositiveButton("确定", new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int id) {
				finish();
			}
		//取消按钮
		}).setNegativeButton("取消", new DialogInterface.OnClickListener() {
			@Override
			public 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() {
			@Override
			public void onClick(DialogInterface dialog, int id) {
				
			}
		});
		AlertDialog alert = builder.create();
		alert.show();
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值