Android初试--资源目录下的文件详解

资源目录下的文件详解

       1.res/drawable目录

       res文件下有四个drawable文件夹分别是drawable-hdpi,drawable-ldpi,drawable-mdpi,drawable-xhdpi其区别只是将图片或图标资源按照分辨率高低来放入以上不同的文件夹中。

       drawable-hdpi里面存放高分辨率的图片,如WVGA(480x800)、FWVGA(480x854)。【high】

       drawable-ldpi里面存放低分辨率的图片,如QVGA(240x320)。【low】

       drawable-mdpi里面存放中等分辨率的图片,如HVGA(320x480)。【medium】

       drawable-xhdpi里面存放超高分辨率的图片。xhdpi是从Android2.2(API Level 8)才开始增加的分类。xlarge是从Android 2.3(API Level 9)才开始增加的分类。【extra high】

       程序运行时可以根据手机分辨率的高低选取相应目录下的图片或图标。如果不想准备过多图片,那么也可以只准备一张图标将其放入以上四个目录中的任何一个中即可。

       2.res/values目录下的常用文件

       2.1 strings.xml

       该文件是用来定义字符串和数值,在Activity中使用getResources().getString(resourceId)或getResources().getText(resourceId)取得资源。

       打开Eclipse,找到res/values目录下的strings.xml,双击打开,默认是”Resources”模式显示,单击旁边的strings.xml,就会以文本模式打开,如图:

 

       工程中的strings.xml文件的内容如下:

<resources>

    <string name="app_name">HelloWorld</string>

    <string name="hello_world">Hello world!</string>

    <string name="menu_settings">Settings</string>

    <string name="title_activity_main">MainActivity</string>

</resources>

       在上面文件中每一个string标签就代表一个字符串数据,其中name属性指定的是我们在程序中引用这个字符串数据的名字。

       为什么我们需要把程序中出现的字符串数据单独存放在strings.xml文件中?

       原因1:为了国际化。例如我们的应用程序在国内市场使用,我们使用的是中文,这不影响什么的。如果我们的应用程序要进入美国市场,那么就需要在应用中出现英文,如果我们没有将字符串数据定义在strings.xml文件中的话,那么我们想要将应用中出现的所用中文通过修改程序的方法一个一个转换成英文,这样做是很麻烦的;如果我们的字符串数据是定义在strings.xml文件中的话,那么我们只需要修改strings.xml中的定义的字符串数据,完成后应用程序中所有出现该字符串数据的地方都会改变,很方便。

       原因2:为了减少手机内存的占用。如果我们有一个“helloworld”的字符串,要在程序中出现100次,那么它所占的内存就大了;如果我们把“helloworld”这个字符串定义在strings.xml中引用100次,其占用的内存就会少很多。还是那句话“手机不是电脑,内存能省就省”。

       2.2style.xml

       定义的Android中的样式文件,内容如下:

<resources>

    <style name="AppTheme" parent="android:Theme.Light" />

</resources>

       样式的使用我们以后再慢慢解释。

       注意:在Android的资源目录下,创建的文件,文件名称中不能有数字,有时大写字母也是不能有的。

       3.res/layout目录中的布局文件。

       一般我们在创建完成一个Android工程后ADT会在res/layout目录下自动生成一个“main.xml”或“activity_main.xml”的布局文件。双击“main.xml”或“activity_main.xml”的布局文件默认是用“Graphical Layout”模式打开的,我们可以点击旁边的“main.xml”或“activity_main.xml”,使用文本模式打开,如图:

 

       文件打开后的代码如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent" >

    <TextView

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_centerHorizontal="true"

        android:layout_centerVertical="true"

        android:text="@string/hello_world"

        tools:context=".MainActivity" />

</RelativeLayout>

       关于这个文件的详细解释,已经在上一个文章中说明过了。

       4.gen目录中R.java文件解释

       R.java文件代码:

/* AUTO-GENERATED FILE.  DO NOT MODIFY.

 *

 * This class was automatically generated by the

 * aapt tool from the resource data it found.  It

 * should not be modified by hand.

 */

package com.click369.helloworld;

public final class R {

    public static final class attr {

    }

    public static final class drawable {

        public static final int ic_action_search=0x7f020000;

        public static final int ic_launcher=0x7f020001;

    }

    public static final class id {

        public static final int menu_settings=0x7f070000;

    }

    public static final class layout {

        public static final int activity_main=0x7f030000;

    }

    public static final class menu {

        public static final int activity_main=0x7f060000;

    }

    public static final class string {

        public static final int app_name=0x7f040000;

        public static final int hello_world=0x7f040001;

        public static final int menu_settings=0x7f040002;

        public static final int title_activity_main=0x7f040003;

    }

    public static final class style {

        public static final int AppTheme=0x7f050000;

    }

}

       在R.java文件中的第一句注释”AUTO-GENERATED FILE.  DO NOT MODIFY.“意思是自动生成的文件,不要修改。

       注释中的第二句话是”This class was automatically generated by the aapt tool from the resource data it found.“意思是这个类是资源打包工具自动生成的,可以从资源数据中找到的。

       注释中的第三句话是”It should not be modified by hand.“意思是不要手动修改它。

       在这个文件中有attr ,drawable ,id ,layout ,menu ,string ,style 这几个静态内部类。其中每个静态内部类分别对应着一种资源,如layout静态内部类对应layout中的界面文件,其中每个静态内部类中的静态常量分别定义一条资源标识符,如public static final int activity_main=0x7f030000;对应的是layout目录下的activity_main.xml文件。

       由于目前【drawable-*dpi】目录下都只有ic_launcher.png一个图片文件,因此此时不同目录中的同名的ic_launcher.png文件在drawable内部类总只有一个ic_launcher属性。如果我们在【drawable-*dpi】目录下再添加一幅图片,则内部类中会自动的添加一个ic_launcher属性。

       添加资源的命名规则:资源文件只能以小写字母和下划线做首字母,随后的名字中只能出现 [a-z0-9_.] 这些字符,否则R.java文件不会自动更新,并且eclipse会提示错误。

       理解了R.java文件中内容的来源,即当开发者在res/目录中任何一个子目录中添加相应类型的文件之后,ADT会在R.java文件中相应的内部类中自动生成一条静态int类型的常量,对添加的文件进行索引。如果在layout目录下再添加一个新的界面,那么在public static final class layout中也会添加相应的静态int常量。相反当我们在res目录下删除任何一个文件,其在R.java中对应的记录会被ADT自动删除。
       R.java文件按除了有自动标示资源的索引功能之外,还有另外一个主要的功能,如果res目录中的某个资源在应用中没有被使用到,在该应用被编译的时候系统就不会把对应的资源编译到该应用的APK包中,这样可以节省Android手机的资源。

       如何通过R.java文件来引用到所需要的资源?

       1.在java程序中引用资源
       按照java的语法来引用即:R.resource_type.resource_name。
       注意:resource_name不需要文件的后缀名。
       Android系统本身自带了很多的资源,我们也可以进行引用,只是需要再前面加上“Android.”以声明该资源来自Android系统,即:Android.R.resource_type.resouce_name
例:【drawable-*hpi】下的ic_launcher.png该图片在R.java文件的映射为drawable内部类下ic_launcher参数,则如果要获取该资源,则写法为:R.drawble.ic_launcher。

       2.在XML文件中引用资源
       格式:@[package:]type/name
       在xml文件中,如main.xml以及AndroidMainfest.xml文件中通过“@drawable/icon”的方式获取。其中“@”代表的是R.java类。“drawable”代表的是R.java中的静态内部类“drawable”,“/ic_launcher”代表静态内部类“drawable”中的静态属性“ic_launcher”,而该属性可以指向res目录下的“drawable-*dpi”中的ic_launcher.png资源。其他类型的文件也比较类似。凡是在R文件中定义的资源都可以通过“@Static_inner_classes_name/resource_name”的方式获取。如“@id/button”,“@string/app_name”。

       如果访问的是Android系统中自带的文件,则要添加包名“Android:”。例如:android:textColor="@android:color/red"。

       在布局文件中当我们需要为一些组件添加Id属性作为标识,可以使用如下的表达式:“@+id/string_name”,其中“+”表示在R.java的名为id的内部类中添加一条记录。例:“@+id/button”的含义是在R.java文件中的id这个静态内部类添加一条常量名为button,该常量就是该资源的标识符。如果 id这个静态内部类不存在,则会先生成它。

       注意:R.java文件不能手动修改。

       5.AndroidManifest.xml文件

       AndroidManifest.xml文件代码:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.click369.helloworld"

    android:versionCode="1"

    android:versionName="1.0" >

    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="15" />

    <application

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name=".MainActivity"

            android:label="@string/title_activity_main" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>

</manifest>

       上面的ndroidManifest.xml文件我已经在上一篇文章中做过解释,请大家参考上一篇的内容。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值