android学习笔记2——资源(二)

        这篇笔记主要讲述下android的一些主要资源类型。下面一张表概括了android中的关键资源类型及其用途:

资源类型位置说明
颜色/res/values/any-file表示指向颜色编码的颜色标识符。这些资源ID在R.java中公开为R.color.*。文件中的XML节点为/resources/color
字符串 /res/values/any-file表示字符串资源。除了简单字符串,字符串资源海支持java格式的字符串和原始HTML。这些资源ID在R.java中公开为R.string.*。文件中XML节点为/resources/string
字符串数组/res/values/any-file表示一个做为字符串数组的资源。这些资源ID在R.java中公开为R.array.*。文件中的XML节点为/resources/string-array
复数(plural)/res/values/any-file根据数量值表示一个合适的字符串集合。数量是一个数字,在各种语言中,编写语句的方式取决于你引用了0个、1个或多个对象。这些资源ID在R.java中公开为R.plural.*。文件中的XML节点为/resources/plurals
尺寸/res/values/any-file表示android中各种元素或试图的尺寸或大小。支持像素、英寸、毫米与密度无关的像素(density independent pixel)以及与比例无关的像素(scale independent pixel)。这些资源ID在R.java中公开为R.dimen.*。文件中的XML节点为/resources/dimen
图像/res/drawable/multiple-files表示图像资源。支持的图像格式包括.jpg、.gif、.png等。每个图像位于独立的文件中,并根据文件名获得自己的ID。这些资源ID在R.java中公开为R.drawable.*。图像支持还包括一种名为可拉伸图像的图像类型,这种类型支持拉伸图像的一部分,而其他部分保持不变。这种可拉伸图像也称为9-patch文件(.9.png)
色图/res/values/any-file以及/res/drawable/multiple-files表示用作视图背景的矩形色块或普通图形对象,比如位图。可以使用色图做为背景,而无需指定单个彩色位图。在java中,这相当于创建一个彩色矩形病将其设置为视图背景
values子目录中的<drawable>值标记支持色图。这些资源ID在R.java中公开为R.drawable.*。文件中的XML节点为/resources/drawable
android还通过在/res/drawable中放置包含根XML标记<shape>的XML文件,支持圆角矩形和渐变矩形。这些资源ID也在R.java中公开为R.drawable.*。在这种情况下,每个文件名会转换为一个独立的图形对象ID
任意XML文件/res/xml/*.xmlandroid允许将任意XML文件用作资源。这些文件使用AAPT编译器编译。这些资源ID在R.java中公开为R.xml.*。
任意原始资源/res/raw/*.*android支持此目录下的任意未编译的二进制文件或文本文件。每个文件都会获得一个唯一的资源ID。这些资源ID在R.java中公开为R.raw.*
任意原始资产/assets/*.*/*.*android支持/assets子目录下任意子目录中的任意文件。这些文件不是真正的资源,知识原始文件。与/res资源子目录不同,这个子目录支持任意深度的子目录。这些文件不会生成任何资源ID,必须使用以/assets开始(不包含它)的相对路径名

下面主要看看字符串资源及字符串数组资源用法:

1.字符串资源

        大部分UI框架都支持字符串资源,但android通过R.java迅速将ID与字符串资源关联,所以在android中将字符串用作资源将简单很多。下面看几种XML资源文件中的字符串资源:普通字符串,引用字符串,HTML字符串及可替换字符串。在/res/values/string.xml(文中使用的所有工程文件是由eclipse默认方式建立android工程时自动生成)中resources子节点下添加代码如下:

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

        第一种使用方法,JAVA源码中直接调用,在MainActivity.java文件中代码清单如下:

                TextView textView = new Textview(this);

                setContentView(textView);

String simpleString = this.getString(R.string.simple_string);
textView.setText(simpleString);

String quotedString = this.getString(R.string.quoted_string);
textView.setText(quotedString);

String doubleQuotedString = this.getString(R.string.double_quoted_string);
textView.setText(doubleQuotedString);

String javaFormatString = this.getString(R.string.java_format_string);
String substitutedString = String.format(javaFormatString, "Hello", "Android");
textView.setText(substitutedString);

String htmlTaggedString = this.getString(R.string.tagged_string);
Spanned textSpan = android.text.Html.fromHtml(htmlTaggedString);
textView.setText(textSpan);

        因为这里没有使用到布局文件,所以只能看到最后一个字串,可以屏蔽以后逐个打开来一一查看效果。

        第2种方法使用布局文件资源,然后在java代码中调用布局文件资源即可。很庆幸的是HTML格式文件在布局资源里面可以自动解析,TextView会自动确认此字符串是HTML字符串,并遵守它的格式。使用布局资源在/res/layout/activity_main.xml文件中添加代码清单如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
。。。
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />    
    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/simple_string"/>    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/quoted_string" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/double_quoted_string" /> 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/java_format_string" />  
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/tagged_string" />
</LinearLayout>

        在JAVA源码中调用setContentView(R.layout.activity_main);即可获得此布局View,不过java格式的字串无法正确显示,目前尚未找到方法(只能使用前面的直接调用的方式),后续再补充。


2.字符串数组

        可以指定一个字符串数组做为/res/values目录(此目录下资源文件不支持子目录)下所有文件中的资源,XML节点使用string-array,此节点为resources的子节点,跟string资源节点一样。在string.xml文件中添加代码清单如下:

<resources xmlns="http://schemas.android.com/apk/res/android">
。。。
    <string name="hello_world">Hello world!</string>
    <string-array name="test_array">
        <item>one</item>
        <item>two</item>
        <item>three</item>
    </string-array>

</resources>

添加了此字符串数组资源以后,利用Java代码获取此数组,在MainActivity.java中添加代码如下:

                Resources res = this.getResources();
String strings[] = res.getStringArray(R.array.
test_array);  //这里通过ID-test_array来引用字符串数组资源,它也是int型的。引用后自动解析为String类型。
for(String s: strings){
Log.d("example", s);

                }

eclipse中运行此工程,LOG_CAT中将收到上述的三个字串。这里字串是数组的元素,故其XML节点为item,在R类中也不生成ID,当然作为resources的子节点string-array,在R类中自动生成静态类,查看R.java文件会发现下面代码段:

    public static final class array {
        public static final int test_array=0x7f060000;
    }


通过上面的学习对字符串资源及字符串数组资源有了深刻的认识,在后面的学习中将会学习到更多的资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值