一、资源简介
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"?> <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"?> <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 |
<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 |
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();
}
}