1、@+id/text1中的(+)加号表示,如果text1这个ID不存在,则创建它。
2、@[package:]type/name
3、定义资源ID供以后使用:
<resources>
<item type="id" name="text"/>
</resources>
<TextView android:id="@id/text">
..
</TextView>
4、AAPT中的资源编译器会编译除raw资源以外的所有资源,并将它们全部放倒最终的.apk文件中。
5、string-array:字符串数组
<resources ….>
……Other resources
<string-array name="test_array">
<item>one</item>
<item>two</item>
<item>three</item>
</string-array>
……Other resources
</resources>
String strings[] = getResources().getStringArray(R.array.test_array);
plurals:复数,英文下只有one和other,用getResources()getQuantityString()方法拿到相应的值
<resources…>
<plurals name="eggs_in_a_nest_text">
<item quantity="one">There is 1 egg</item>
<item quantity="other">There are %d eggs</item>
</plurals>
</resources>
color:activity.getResources.getColor
Android中定义了一组基本颜色,通过android.R.color获取
http://code.google.com/android/reference/android/R.color.html
dimen:尺寸activity.getResources().getDimension()
<resources>
<dimen name="mysize_in_pixels">1px</dimen>
<dimen name="mysize_in_dp">5dp</dimen>
<dimen name="medium_size">100sp</dimen>
</resources>
px: 像素
in: 英寸
mm: 毫米
pt: 磅
dp:与密度无关的像素,基于160dpi(每英寸像素数)屏幕(尺寸适应密度屏幕)
sp:与比例无关的像素(这种尺寸支持用户调整大小,适应在字体中使用)
drawable:图像资源(gif,jpg,png及Android可拉伸png)res/drawable下的子目录将被忽略,可拉伸图像用tools文件夹下的Draw 9-patch工具生成。
BitmapDrawable d = activity.getResources().getDrawable(R.drawable.sample_image);
注意这个资源被解析为BitmapDrawable
Color Drawable:色图,可理解为一个彩色的矩形。写在/res/values下的xml文件中
<resources>
<drawable name="red_rectangle">#f00</drawable>
<drawable name="blue_rectangle">#0000ff</drawable>
<drawable name="green_rectangle">#f0f0</drawable>
</resources>
ColorDrawable redDrawable =(ColorDrawable)activity.getResources().getDrawable(R.drawable.red_rectangle);
注意此资源被解析成ColorDrawable
具有形状的矩形(如圆角矩形):写在/res/values下的xml文件中。用shape标记
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#f0600000"/>
<stroke android:width="3dp" color="#ffff8080"/>
<corners android:radius="13dp" />
<padding android:left="10dp" android:top="10dp"
android:right="10dp" android:bottom="10dp" />
</shape>
GradientDrawable roundedRectangle =(GradientDrawable)activity.getResources().getDrawable(R.drawable.my_rounded_rectangle);
注意此资源(具有形状的xml文件)被解析成GradientDrawable
6、定义普通字符串,引用字符串(quoted string),HTML字符串和可替换字符串
<resources>
<string name="simple_string">simple string</string>
<string name="quoted_string">"quoted 'xyz’ string"</string>
<string name="double_quoted_string">\"double quotes\"</string>
<string name="java_format_string">
hello %2$s Java format string. %1$s again
</string>
<string name="tagged_string">
Hello <b><i>Slanted Android</i></b>, You are bold.
</string>
</resources>
//Read a simple string and set it in a text view
String simpleString = activity.getString(R.string.simple_string);
textView.setText(simpleString);
//Read a quoted string and set it in a text view
String quotedString = activity.getString(R.string.quoted_string);
textView.setText(quotedString);
//Read a double quoted string and set it in a text view
String doubleQuotedString = activity.getString(R.string.double_quoted_string);
textView.setText(doubleQuotedString);
//Read a Java format string
String javaFormatString = activity.getString(R.string.java_format_string);
//Convert the formatted string by passing in arguments
String substitutedString = String.format(javaFormatString, "Hello" , "Android");
//set the output in a text view
textView.setText(substitutedString);
//Read an html string from the resource and set it in a text view
String htmlTaggedString = activity.getString(R.string.tagged_string);
//Convert it to a text span so that it can be set in a text view
//android.text.Html class allows painting of "html" strings
//This is strictly an Android class and does not support all html tags
Spanned textSpan = android.text.Html.fromHtml(htmlTaggedString);
//Set it in a text view
textView.setText(textSpan);
android:text="@string/tagged_string"中Android可自动确定此字符串是HTML字符串。
7、任意XML资源文件:结构化资源文件以外的任意资源文件保存在res/xml目录下。
与raw目录下存储的xml文件不同,这些xml文件在apk文件中也已经编译过了
<rootelem1>
<subelem1>
Hello World from an xml sub element
</subelem1>
</rootelem1>
private String getEventsFromAnXMLFile(Activity activity)
throws XmlPullParserException, IOException {
StringBuffer sb = new StringBuffer();
Resources res = activity.getResources();
XmlResourceParser xpp = res.getXml(R.xml.test);
xpp.next();
int eventType = xpp.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
if (eventType == XmlPullParser.START_DOCUMENT) {
sb.append("******Start document");
} else if (eventType == XmlPullParser.START_TAG) {
sb.append("\nStart tag " + xpp.getName());
} else if (eventType == XmlPullParser.END_TAG) {
sb.append("\nEnd tag " + xpp.getName());
} else if (eventType == XmlPullParser.TEXT) {
sb.append("\nText " + xpp.getText());
}
eventType = xpp.next();
}// eof-while
sb.append("\n******End document");
return sb.toString();
}// eof-function
8、原始资源:没有经过编译的文件如xml、音视频文件等,会生成相应的索引ID。
String getStringFromRawFile(Activity activity) throws IOException {
Resources r = activity.getResources();
InputStream is = r.openRawResource(R.raw.test);
String myText = convertStreamToString(is);
is.close();
return myText;
}
String convertStreamToString(InputStream is) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int i = is.read();
while (i != -1) {
baos.write(i);
i = is.read();
}
return baos.toString();
}
9、资产(assets):在assets目录下,与res同级,其下的文件没有编译也没有生成索引,需要通过文件路径才能找到。支持任意深度的子目录。
AssetManager am = activity.getAssets();
InputStream is = am.open("test.txt");
10、资源目录结构
/res/values/strings.xml
/colors.xml
/dimens.xml
/attrs.xml
/styles.xml
/drawable/*.png
/*.jpg
/*.gif
/*.9.png
/anim/*.xml
/layout/*.xml
/raw/*.*
/xml/*.xml
/assets/*.*/*.*
11、资源和配置更改
\res\layout\main_layout.xml
\res\layout-port\main_layout.xml
\res\layout-land\main_layout.xml
上面是三个独立的布局文件,但是它们仅在R.java中生成一个布局文件ID,其中第一个为默认资源,下面两个为备用资源,用连字符(-)分开。
mccAAA: AAA为移动设备国家代码
mncAAA: AAA为运营商/网络代码
en-rUS: 语言和区域
small, normal, large, xlarge: 屏幕大小
long, notlong: 屏幕类型
port, land: 纵向或横向
car, desk: 扩展坞类型
night, notnight: 晚上或白天
ldpi, mdpi, hdpi, xhdpi, nodpi: 屏幕像素密度
notouch, stylus, finger: 屏幕种类
keysexposed, keyssoft, keyshidden: 键盘种类
nokeys, qwerty, 12key: 键数
navexposed, navhidden: 隐藏或显示导航键
nonav, dpad, trackball, wheel: 导航设备类型
v3, v4, v7: API 级别
注意不同备用资源间有优先顺序,比如语言高于横竖屏。