疯狂android讲义(第三版)——第六章:Android应用的资源

 

Android 应用的资源


    res目录下的资源,Android SDK会在编译时,自动在R.java文件中为这些资源创建索引,程序可以直接通过R资源清单类进行访问
    assets目录下的资源代表应用无法直接访问的原生资源,应用程序需要通过AssetManager以二进制流的形式来读取资源


应用资源---res/assets


    资源的类型以及存储方式
        raw---原生资源
        values---各种简单值的XML文件,根元素都是<resources ... />,建议使用不同的文件来存放不同类型的值。
            arrays.xml
            colors.xml
            dimens.xml
            strings.xml
            styles.xml
        xml---原生XML文件


    使用资源---java代码和XML文件中使用资源


        java代码---使用资源清单项
            [<package_name>.]R.<resource_type>.<resource_name>


        java代码---访问实际资源
            清单项是一个int类型的值,并不是实际的资源对象
            有些时候,程序需要使用实际的Android资源,为通过清单项来获取实际资源,可以借助与Android提供的Resource类
                Resources---由Context调用getResources()获取
                    getXxx(int id)
                    getAssets()---获取访问/assets/目录下资源的AsseManager对象


        XML
            @[<package_name>:]<resource_type>/<resource_name>


字符串、颜色、尺寸资源---/res/values/Strings / colors / dimens
    颜色值定义---#RGB / #AGRB / #RRGGBB / #AARRGGBB
    定义字符串、颜色、尺寸资源文件
    使用资源
        Android允许使用资源文件定义boolean常量。/res/values/bools.xml
            <bool name="...">true</bool>
        整型常量---integers.xml
            <integer name="...">21</integer>
        getResources().getBoolean(R.bool.is_male) / getResources().getInteger(r.intefer.my_size)


数组资源---/res/values/arrays.xml
    <array.../>
    <string-array.../>
    <integer-array... />
    得到实际数组:
        String[] getStringArray(int id)
        int[] getIntArray(int id)
        TypedArray obtaintypedArray(int id)
            TypedArray代表一个通用类型的数组,该类提供了getXxx(int index)获取指定索引处的数组元素


Drawable资源---不仅可以直接存放图片资源,也可以存放多种XML文件作为资源
    图片资源---getDrawable(int id)获取实际资源
    StateListDrawable资源---组织多个Drawable对象。随目标组件状态的改变而自动切换。
        根元素<selector.../>,包含多个<item.../>元素
            android:color或android:drawable 指定颜色或drawable对象
            android:state_xxx: 指定一个特定状态
                android : state_pressed
                android : state_checked
                android : state_focused


    LayerDrawable资源---也可包含一个drawable数组,将会按照数组顺序绘制,索引最大的Drawable对象将会绘制在最上面
        根元素是<layer_list ... />,包含多个<item.../>元素
            android : drawable:指定作为LayerDrawable元素之一的Drawable对象
            android : id:为该Drawable指定一个标识
            android : buttom | top | left | right:用于指定一个长度值,用于指定将该Drawable对象绘制到目标组件的指定位置


    ShapeDrawable资源---定义一个基本的几何图形(矩形、圆形、线条等)
        根元素为<shape .../>
            android : shape=["rectangle" | "oval" | "line" | "ring"]:指定定义那种类型的几何图形。
            <corners.../>---四角弧度
                radius
                topLeftRadius
                ...
            <gradient.../>---使用渐变色填充
                angle
                centerX | centerY
                startColor | centerColor | endColor
                gradientRadius
                type=["linear" | "radial" | "sweep"]
                usesLevel=["true" | "flase"]
            <padding.../>---内边距
                left | right | top | bottom
            <size.../>---形状的大小
                wight | color | dashWidth | dashGap
            <solid../>---单种颜色填充
                color
            <stroke.../>---绘制边框
                wiath
                color
                dashWidth
                dashGap


    ClipDrawable资源---从其他位图截取一个“图片片段”
        <clip.../>
            android : drawable:指定截取的源Drawable对象
            android : clipOrientation:指定截取方向
            android : gravity:指定截取的对齐方式
        setLevel(int level)设置截取的区域大小,0表示片段为空,10000表示截取整张图片。
        设置定时器让程序不断调用setLevel()即可实现图片徐徐展开的效果。---图片进度条


    AnimationDrawable资源---代表一个动画。(补间动画为例)
        根元素<set.../>
            interpolator
            shareInterpolator
            duration
            fillAfter
            <alpha.../>
                fromAlpha | toAlpha
            <scale.../>:缩放变换
                fromXScale | fromYScale | toXScale | toYScale
                pivotX | pivotY
            <translate.../>:位移变换
                fromXDelta | fromYDelta | toXDelta | toYDelta
            <rotate.../>:旋转
                fromDegrees | toDegrees
                pivotX | pivotY
        定义动画的XML应放在/res/anim/路径下
        获取实际的Animation对象,可调用AnimationUtils的如下方法
            loadAnimation(Context ctx,int resId)


属性动画资源---<set.../>、<objectAnimator.../>、<animator.../>


原始XML资源---初始化的配置信息、数据资源需要保存,推荐使用XML文件保存。
    定义原始XML资源---保存路径/res/xml/
        获取实际资源
            XmlResourceParser getXml(int id):获取XML文档,并使用XmlPullParse解析该文档,该方法返回一个解析器对象(XmlResourceParse 是XmlPullParse的子类)
                .getEventType()!=XmlResourceParser.END_DOCUMENT
                Pull解析器是一个开源项目,Android内置了此解析器。
                    采用事件驱动的方式进行解析
                    可不断调用Pull解析器的next()获取下一个解析事件
                    XmlPullParser的getAttributeValue()获取属性值
                    XmlPullParser的nextText()获取文本节点的值
            InputStream openRawResource(int id):获取XML文档对应的输入流
                即可自行选择解析器来解析该XML资源
    使用原始XML资源
        XmlResoueceParser xrp=getResources().getXml(R.xml.books);
        try{
        StringBuilder sb=new StringBuilder("");
        while(.getEventType()!=XmlResourceParser.END_DOCUMENT){
        if(xrp.getEventType()==XmlResourceParser.START_TAG){
        String tagName=xrp.getName();
        if(tagName.equals("book")){
        String bookName=xrp.getAttributeValue(null,"price");
        sb.append("价格:");
        sb.append(bookName);
        String bookPrice=xrp.getAttributeValue(1);
        sb.append("...");
        ...
        sb.append(xrp.nextText());}
        sb.append("\n");}
        xrp.next();}
        show.setText(sb.toString());}
        catch...


布局资源---/res/layout/


菜单资源---/res/menu/,根元素为<menu.../>


样式和主题资源---Style / Theme
    样式资源---/res/values/
        根元素为<resources.../>
            多个<style.../>---每个style包含一个样式
                name---样式的名称
                parent---所继承的父样式
                多个<item.../>子元素,每个item定义一个格式项
    主题资源---/res/values/
        根元素为<resources.../>,使用<style.../>定义主题
        不能作用于单个View组件,对整个应用的Activity或对指定的Activity起作用
        主题定义的格式应该是改变窗口外观的格式,例如窗口标题、窗口边框等
        支持继承
        使用
            setTheme(R,style....)
            theme="@style/..."
    Material主题---5.0新增,动态效果和过度风格
        android:Theme.Material.Xxx


属性资源---自定义View组件需要指定属性是需要属性资源的帮助。/res/values/
    根元素也是<resources.../>
        attr子元素---定义一个属性
        declare-styleable子元素---定义一个styleable对象,每个styleable对象就是一组attr属性的集合。
    通过自定义组件的构造器中通过AttributeSet对象来获取这些属性


原始资源---类似于声音文件以及其他各种类型的文件(没有为之提供专门的支持)都称为原始资源。
    /res/raw/---SDK会在R清单类中为该目录下的资源生成一个索引项
    /assets/---通过AssetManager来管理该目录下的原始资源
        InputStream open(String fileName)
        AssetFileDescriptor openFd(String fileName)
    MediaPlayer mp=null
    mp=MediaPlayer.create(this,R.raw.bomb);
    AssetManager am=getAssets();
    AssetFileDescriptor afd=am.openFd("shot.mp3");
    mp2=new MediaPlayer()
    mp2.setDataSource(afd.getFileDescriptor());
    mp2.prepare();
    mp.start()


国际化和资源自适应---I18N / L10N
    java国际化的思路---提供相应的资源文件。主要通过以下三个类完成:
        java.util.ResourceBundle
        java.util.Locale
        java.text.MessageFormat
        资源文件的三种命名形式:
            baseName_language_country.properties
            baseName_language.properties
            baseName.properties---资源文件的基本名


    java支持的国家和语言
        Locale类的getAvailableLocales方法获取Java所支持的国家和语言。该方法返回一个Locale数组。
    完成程序国际化
        将需要输出的各种字符串定义在资源包中
        非西欧字符的资源文件,java提供工具:native2ascii
            native2ascii 源资源文件 目的资源文件
            将生成乱码的目的资源文件,重命名即可
        讲不同国家的/语言的提示信息分别以不同文件存放即可
            Xxx_zh_CN.properties
            Xxx_en_US.properties


        关键类:ResourceBundle,静态方法:getBundle(String baseName,Locale locale)
            ResourceBundle bundle=ResourceBundle.getBundle("mess",myLocale);


    为Android应用提供国际化资源---为values目录添加几个不同语言国家版本
        values-语言代码-r国家代码
        drawable-语言代码-r国家代码
    国际化Android应用


自适应屏幕的资源
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值