精通Android3笔记--第三章

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 级别

          注意不同备用资源间有优先顺序,比如语言高于横竖屏。

 

你可能感兴趣的:(android,移动开发,资源,resources,编译器)