精华内容
下载资源
问答
  • Android资源文件夹anim和animator都是放置动画相关的xml文件。这里简要说明一下,Android中动画分为属性动画和视图动画两大类,其中视图动画又分帧动画和补间动画。对于动画资源文件,官方动画也有详细说明,本文...

    主要区别

    在这里插入图片描述
    Android资源文件夹anim和animator都是放置动画相关的xml文件。这里简要说明一下,Android中动画分为属性动画和视图动画两大类,其中视图动画又分帧动画和补间动画。对于动画资源文件,官方动画也有详细说明,本文归纳总结思路更清晰。文件夹anim和animator其中主要区别在于:

    • anim文件夹:放置补间动画相关的xml,有补间属性控制xml和自定义插值器两种xml文件
    • animator文件夹:放置属性动画xml
    • drawable文件夹:帧动画xml

    anim文件夹下的补间控制xml

    res/anim/my_animation.xml

    ​ 首先,文件必须具有一个根元素,可以是 <alpha><scale><translate><rotate> 或包含一组(或多组)其他动画元素(甚至是嵌套的 <set> 元素)的 <set> 元素。模板demo如下

        <set xmlns:android="http://schemas.android.com/apk/res/android"
            android:shareInterpolator="false">
            <scale
                android:interpolator="@android:anim/accelerate_decelerate_interpolator"
                android:fromXScale="1.0"
                android:toXScale="1.4"
                android:fromYScale="1.0"
                android:toYScale="0.6"
                android:pivotX="50%"
                android:pivotY="50%"
                android:fillAfter="false"
                android:duration="700" />
            <set
                android:interpolator="@android:anim/accelerate_interpolator"
                android:startOffset="700">
                <scale
                    android:fromXScale="1.4"
                    android:toXScale="0.0"
                    android:fromYScale="0.6"
                    android:toYScale="0.0"
                    android:pivotX="50%"
                    android:pivotY="50%"
                    android:duration="400" />
                <rotate
                    android:fromDegrees="0"
                    android:toDegrees="-45"
                    android:toYScale="0.0"
                    android:pivotX="50%"
                    android:pivotY="50%"
                    android:duration="400" />
            </set>
        </set>  
    

    使用补间动画

    ImageView image = (ImageView) findViewById(R.id.image);
    Animation myAnimation = AnimationUtils.loadAnimation(this, R.anim.my_animation);
    image.startAnimation(myAnimation);
    

    anim文件夹下的插值器xml

    res/anim/my_interpolator.xml`

    插值器是在 XML 中定义的动画修改器,它会影响动画的变化率。插值器可对现有的动画效果执行加速、减速、重复、退回等。插值器通过 android:interpolator 属性应用于动画元素,该属性的值是对插值器资源的引用。Android 中提供的所有插值器都是 Interpolator 类的子类。为便于您使用 android:interpolator 属性将插值器应用于动画,Android 针对每个插值器类包含了一个可供您引用的公共资源。下表指定了每个插值器要使用的资源:

    插值器类资源 ID
    AccelerateDecelerateInterpolator@android:anim/accelerate_decelerate_interpolator
    AccelerateInterpolator@android:anim/accelerate_interpolator
    AnticipateInterpolator@android:anim/anticipate_interpolator
    AnticipateOvershootInterpolator@android:anim/anticipate_overshoot_interpolator
    BounceInterpolator@android:anim/bounce_interpolator
    CycleInterpolator@android:anim/cycle_interpolator
    DecelerateInterpolator@android:anim/decelerate_interpolator
    LinearInterpolator@android:anim/linear_interpolator
    OvershootInterpolator@android:anim/overshoot_interpolator

    如果您对平台提供的插值器(在上表中列出)不满意,则可以使用修改过的属性创建自定义插值器资源。例如,您可以调整 AnticipateInterpolator 的加速率或调整 CycleInterpolator 的循环次数。为此,您需要在 XML 文件中创建自己的插值器资源。

    <?xml version="1.0" encoding="utf-8"?>
    <InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"
            android:attribute_name="value"
            />
    

    InterpolatorName 为官方提供的插值器中的一个,主要对插值器修改为你想要的值即可。

    drawable文件夹下的帧动画xml

    res/drawable/filename.xml

    在 XML 中定义的按顺序显示一系列图片的动画(如电影)。指向 AnimationDrawable 的资源指针。

    语法demo

        <?xml version="1.0" encoding="utf-8"?>
        <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
            android:oneshot="false">
            <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
            <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
            <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
        </animation-list>
    

    使用

        ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
        rocketImage.setBackgroundResource(R.drawable.rocket_thrust);
    
        rocketAnimation = rocketImage.getBackground();
        if (rocketAnimation instanceof Animatable) {
            ((Animatable)rocketAnimation).start();
        }
    

    animator文件夹下的属性动画xml

    res/animator/property_animator.xml

    属性动画,在 XML 中定义的动画,用于在设定的一段时间内修改目标对象的属性。指向 ValueAnimatorObjectAnimatorAnimatorSet 的资源指针。该文件必须具有一个根元素,可以是 <set><objectAnimator><valueAnimator>。您可以将动画元素(包括其他 <set> 元素)组合到 <set> 元素中。语法如下:

        <set
          android:ordering=["together" | "sequentially"]>
    
            <objectAnimator
                android:propertyName="string"
                android:duration="int"
                android:valueFrom="float | int | color"
                android:valueTo="float | int | color"
                android:startOffset="int"
                android:repeatCount="int"
                android:repeatMode=["repeat" | "reverse"]
                android:valueType=["intType" | "floatType" | "pathType"]/>
    
            <animator
                android:duration="int"
                android:valueFrom="float | int | color"
                android:valueTo="float | int | color"
                android:startOffset="int"
                android:repeatCount="int"
                android:repeatMode=["repeat" | "reverse"]
                android:valueType=["intType" | "floatType" | "pathType"]/>
    
            <set>
                ...
            </set>
        </set>
        
    

    这里注意AnimatedVectorDrawable的使用中,我么知道valueType中新加了valueType类型pathType

    使用demo

    AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,R.animator.property_animator);
    set.setTarget(myObject);
    set.start();
    

    总结

    animanimator文件夹的区别主要是根据动画类别来区分的,其中anim主要放置补间动画相关的xml(补间属性、插值器),animator放置属性动画相关的内容。另外,在drawable文件夹下放置逐帧动画的xml。这些就是主要区别。

    展开全文
  • Android资源文件夹命名规则

    千次阅读 2017-01-16 15:46:36
    几乎所有的应用都要提另外的特殊资源来适配特殊配置的设备。例如:你必须提供不同尺寸的图片资源以适配不同屏幕密度的...android资源文件夹默认的命名见Providing Resources的table1 创建指定的具体资源文件: 在

        几乎所有的应用都要提另外的特殊资源来适配特殊配置的设备。例如:你必须提供不同尺寸的图片资源以适配不同屏幕密度的设备;你需要提供多个string资源文件以支持国际化。Android会根据当前设备的配置来加载适当的资源。

    一. Android资源文件夹命名规则

    android资源文件夹默认的命名见Providing Resources的table1

    创建指定的具体资源文件:

    1. 在res/文件夹下创建一个新的目录:<resources_name>-<config_qualifier>
      • <resources_name>是默认的默认的目录名称(table1中定义的)
      • <qualifier>限制条件(table2中定义)
        特殊资源目录名称可以有多个限制条件,每个限制条件用(-)短横线隔开。

    警告:特殊资源目录名的多个限制条件必须按table2的优先级排列。如果限定条件的排列顺序错误,则编译不通过。

    1. 特殊资源目录中资源文件名称必须与默认资源目录下的资源文件名称相同。

    Table2按优先级列出了所有限定条件。如果你的资源目录用到了多个限定条件,你必须按下表的名称顺命名。
    Table2. 限定条件名称(详见Providing Resources的table2)

    ConfigurationQuanlifier ValuesDescription
    MCC and MNCExamples:
    mcc310
    mcc310-mnc004
    mcc208-mnc00
    etc.
    sim卡运营商
    Language and regionExamples:
    en
    fr
    en-rUS
    fr-rFR
    fr-rCA
    etc.
    语言与地区
    Layout Directionldrtl
    ldltr
    布局方向
    smallestWidthsw<N>dp
    Examples:
    sw320dp
    sw600dp
    sw720dp
    etc.
    屏幕最小宽度
    Available widthw<N>dp
    Examples:
    w720dp
    w1024dp
    etc.
    屏幕最佳宽度
    Available heighth<N>dp
    Examples:
    h720dp
    h1024dp
    etc.
    屏幕最佳高度
    Screen sizesmall
    normal
    large
    xlarge
    屏幕尺寸。
    实际物理尺寸。就是我们常说的3.5英寸屏幕,4.7英寸屏幕等等,这个长度说的是对角线的长度。
    在android中屏幕物理尺寸划分为这么几类:small,normal,large,extra large。
    xlarge screens are at least 960dp x 720dp
    large screen are at least 640dp x 480dp
    normal screens are at least 470dp x 320dp
    small screens are at least 426dp x 320dp
    下图是对尺寸以及密度的一个粗略分类。
    Alt text
    Screen aspectlong
    notlong
    屏幕长短边模式。
    长宽比是屏幕的物理宽度与物理高度的比例关系。
    long: Long screens, such as WQVGA, WVGA, FWVGA 
    notlong: Not long screens, such as QVGA, HVGA, and VGA
    Round screenround
    notround
    是否圆形屏幕
    round: 圆形屏幕,如一些圆形穿戴设备
    notround: 矩形屏幕,如手机、平板等
    Screen orientationport
    land
    当前屏幕横屏竖屏显示模式
    port: 设备在纵向(vertical)
    land: 设备在横向(horizontal)
    UI modecar
    desk
    television
    appliance
    watch
    dock模式
    Night modenight
    notnight
    night: 晚上
    notnight: 白天
    Screen pixel density(dpi)ldpi
    mdpi
    hdpi
    xhdpi
    xxhdpi
    xxxhdpi
    nodpi
    tvdpi
    屏幕最佳dpi
    ldpi: ~120dpi
    mdpi: ~160dpi
    hdpi: ~240dpi
    xhdpi: ~320dpi
    xxhdpi: ~480dpi
    xxxhdpi: ~640dpi
    nodpi: 可用于不想随屏幕密度缩放的bitmap资源
    tvdpi: 屏幕密度介于mdpi与hdpi之间,大约为213dpi。
    Touchscreen typenotouch
    finger
    触摸屏类型
    Keyboard availabilitykeysexposed
    keyshidden
    keyssoft
    键盘类型
    Primary text input methodnokeys
    qwerty
    12key
    硬按键类型
    Navigation key availabilitynavexposed
    navhidden
    方向键是否可用
    Primary nontouch navigation methodnonav
    dpad
    trackball
    whell
    方向键类型
    Platform Version(API level)Examples:
    v3
    v4
    v7
    etc.
    android版本

    注意:有些限定条件是从android 1.0就开始支持的,所以不是所有的Android版本都支持所有的限定条件。一个新版的限定条件,默认包含了android版本的限定条件,旧版Android会会自动忽略这个限定条件的资源文件夹。例如:values-w600dp的资源文件夹默认自动包含了v13的限定条件,因为available-width这个限定条件是从API v13才添加的。

    资源文件夹命名规则:

    • 资源文件夹名称可以指定多个限定条件并用(-)短横线分开。如:drawable-en-rUS-land表示美式英语的横向设备。
    • 限定条件必须按table2的优先级排序。如:
      • 错误:drawable-hdpi-port
      • 正确:drawable-port-hdpi
    • 资源目录不允许嵌套。如:不能有 res/drawable/drawable-en这样的目录。
    • 资源目录不区分大小写。
    • 同一限定条件只能有一个值。如:drawable-rES-rFR是不被允许的,你必须把它分成两个单独的资源目录,drawable-rES和drawable-rFR。

    命名方法与要求

    • 命名不区分大小写
    • 命名形式:资源名-属性1-属性2-属性3-属性4-属性5……
      资源名就是table1的资源类型名,包括:drawable, values, layout, anim, raw, menu, color, animator, xml;
      属性1-属性2-属性3-属性4-属性5……就是table2的属性,如:en-port-hdpi;

    注意:各属性的位置顺序必须最受优先级从高到低排列,否则编译不通过。

    实例说明

    • 把全部属性都用上的例子(个属性按优先级先后排列出来的)
      values-mcc310-en-sw320dp-w720dp-h720dp-large-long-port-car-night-ldpi-notouch-keysexposed-nokeys-navexposed-nonav-v7
    • 上述例子属性的中文说明
      values-mcc310(sim卡运营商)-en(语言)-sw320dp(屏幕最小宽度)-w720dp(屏幕最佳宽度)-h720dp(屏幕最佳高度)-large(屏幕尺寸)-long(屏幕长短边模式)-port(当前屏幕横竖屏显示模式)-car(dock模式)-night(白天或夜晚)-ldpi(屏幕最佳dpi)-notouch(触摸屏模类型)-keysexposed(键盘类型)-nokey(硬按键类型)-navexposed(方向键是否可用)-nonav(方向键类型)-v7(android版本)

    二. 系统如何确定最佳资源

    • 获取手机当前的基本配置信息(语言,横竖屏,屏幕密度,屏幕尺寸等等)
    • 根据这些配置信息,排除apk包中与这些配置信息相矛盾的资源目录;如:系统语言为cn,那么所有的其他语言的目录都会被排除掉,注意系统并不会根据一个dpi的冲突而排除掉含有其他dpi的目录,dpi这个限制条件非常特殊。
    • 按照限制条件的优先级,依次拿出配置信息中优先级最高的限制条件,去资源目录中寻找包含这个限制条件的目录,如果有,排除掉其他目录,根据配置中下一个优先级的限制条件继续匹配,如果没有,接着去拿下一个优先级的限制条件,继续寻找和排除,直到找到最合适的目录。

    算法如下图:

    Alt textAlt text

    实例

    如:在一下资源目录中含有同一个文件名的图片资源。

    drawable/
    drawable-en/
    drawable-fr-rCA/
    drawable-en-port/
    drawable-en-notouch-12key/
    drawable-port-ldpi/
    drawable-port-notouch-12key/
    

    并假设当前系统配置为:

    Locale = en-GB
    Screen orientation = port
    Screen pixel density = hdpi
    Touchscreen type = notouch
    Primary text input method = 12key
    

    系统匹配最佳资源的过程为: 首先限制条件的优先级为:en-GB, port, hdpi, nottouch, 12key

    1. 根据系统配置信息,首先排除drawable-fr-rCA 这个目录,因为fr和en冲突。

    drawable/
    drawable-en/
    drawable-fr-rCA/
    drawable-en-port/
    drawable-en-notouch-12key/
    drawable-port-ldpi/
    drawable-port-notouch-12key/

    注意:因为dpi使用match选择,所以drawable-port-ldpi没有被清除

    1. 根据限制条件优先级,选择最高优先级限制条件(MCC最高,然后依次向下选择)
    2. 是否有资源目录包含这个限制条件?
      • 没有,返回步骤2,并查看下一个限制条件。(本例中,没有符合的限制条件直到语言和地域)。
      • 有,继续步骤4。
    3. 清除不包含此限制条件的所有目录。如:清除所有不包含语言的的目录:

    drawable/
    drawable-en/
    drawable-en-port/
    drawable-en-notouch-12key/
    drawable-port-ldpi/
    drawable-port-notouch-12key/

    注意:如果限定条件是屏幕像素密度,系统选择设备最匹配的屏幕密度。

    1. 重复步骤2和3,直到步骤4中只剩下一个文件夹则返回。本例中,屏幕方向是下一个最高优先级的属性,所以可以清除两个文件夹:

    drawable-en/
    drawable-en-port/
    drawable-en-notouch-12key/

    最终的文件夹就是drawable-en-port/

    http://developer.android.com/guide/topics/resources/providing-resources.html 

    展开全文
  • 日常开发中我们的资源文件都是放在res下面,当res文件过多的时候找一个文件就非常难找了,虽然我们有Android-File-Grouping 插件可以对文件进行分类,但是我们可能还是希望可以使用不同的文件夹去保管资源文件 ...

    Gradle SourceSet

    日常开发中我们的资源文件都是放在res下面,当res文件过多的时候找一个文件就非常难找了,虽然我们有Android-File-Grouping 插件可以对文件进行分类,但是我们可能还是希望可以使用不同的文件夹去保管资源文件

    源码

    • 如果想要自己创建文件夹,我们需要使用Gradle中的SourceSet,因为本文所讲的为Android开发,所以我们可以去查看 AndroidSourceSet类,因为我们只要是设置文件夹的位置,所以我们只需要关注set方法即可
      在这里插入图片描述

    配置

    • 接下来我们开始配置
    android {
    ......
      sourceSets {
            main{
                res.srcDirs("src/main/res",
                        "src/main/res-test1",
                        "src/main/res-test2")
            }
        }
     ........
     }
     // 或者放到闭包外面
     this.android. sourceSets {
        main{
            res.srcDirs("src/main/res",
                    "src/main/res-test1",
                    "src/main/res-test2")
        }
    }
    

    在这里插入图片描述

    总结

    • 善于用编程得思想去理解gradle
    • 源码自有黄金屋
    • 多多查看官方文档
    • 我们也可以根据源码去修改其他的资源文件夹,这是Maven做不到的
    展开全文
  • 与其他平台的应用程序一样,Android中的应用程序也会使用各种资源,比如图片,字串等,会把它们放入源码的相应文件夹下面,如/res/drawable, /res/xml, /res/values/, /res/raw, /res/layout和/assets。Android也...
    与其他平台的应用程序一样,Android中的应用程序也会使用各种资源,比如图片,字串等,会把它们放入源码的相应文件夹下面,Android也支持并鼓励开发者把UI相关的布局和元素,用XML资源来实现。
    总结起来,Android中支持的资源
    
    •颜色值                 /res/values               以resources为Root的XML文件,定义形式为<color name>value</color>
    •字串                    /res/values                以resources为Root的XML文件<string name>value</string>

    •图片                    /res/drawable            直接放入,支持9 Patch可自由拉伸

    详细解释:

    Android提供了一个自定义的2D图形库来绘制图像和图像.在android.graphics.drawable包中你就可以找到这些用于2维绘画的通用类.

    Drawable是通常指的那种可以作画的东西的抽象.你将发现Drawable类扩展出了很多特定的可绘图形类,包括BitmapDrawable,ShapeDrawable,PictureDrawable,LayerDrawable,等等.当然,你也可以从它们派生出你自己的类来定义你自己的Drawable对象,并且以你独有的方式来表现.

    有三种方法来定义并实例化一个Drawable:使用一个保存在你的项目资源中的图像;使用一个定义了Drawable属性的XML文件;或使用普通的类对象构造方式.

    1.从资源中的图像创建

    添加图形到你的应用的一个简单的方式是从你的项目资源中引用一个图像文件.支持的文件格式有PNG(首选),JPG (可接受)和GIF(不推荐).此技术优先用于程序图标,logo,或其它图形,比如用于游戏中的.
    要使用一个图像资源,只需把你的文件添加到项目的res/drawable/文件夹下.从这里,你可以在你的代码或XMLlayout中引用它.不论从哪里引用,推荐使用一个资源ID,它是不带扩展名的文件名(例如,my_image.png的ID是my_image).
    注:图像资源放在res/drawable/下,可能会在构建过程中自动被aapt工具无损压缩以进行优化.例如,一个不需要超过256种颜色的真彩色PNG可能被转换成一个带有调色板的8位PNG.这将造成保持图像质量不变的情况下,占用更少的内存.所以要注意放在这个文件夹下的图像在构建期间可能会改变.如果你想把一个图像作为比特流读入以转换成一个bitmap,那么应把你的图象放在res/raw/文件夹下,在这里他们不会被优化.

    如果你想创建一个Drawable对象,你就可以在在你的XML中定义Drawable,并且把文件保存到项目的res/drawable/文件夹下.然后,通过调用Resources.getDrawable()方法获取并实例化这个对象,把你的XML文件的资源ID传给这个函数。


    •图片的颜色        /res/values               以resources为Root的XML文件,定义形式为<drawable name>value</drawable>
    •单位资源            /res/values               以resources为Root的XML文件<dimen name>value</dimen>
    •菜单                    /res/menu                以menuo为root的XML文件
    •布局                    /res/layout                 这个就是GUI的布局和元素 (被编译为屏幕布局(或屏幕的一部分)的XML文件)
    •风格和主题        /res/values                以resources为Root的XML文件<style name>value</style>
    •动画                    /res/anim                 有二种:一个是帧动画(frame animation),也就是连续变换图片以animation-list为Root的XML文件;另外一种就是补间动画(tweened animation),它对应于API中的Animation和AnimationSet,有translate、scale、rotate、alpha四种,以set为root来定义,这个set就相当于AnimationSet
    目录:
    •/res/anim                  用于存放动画

    •/res/drawable          存放图片,或等同于图片的资源如shape,或selector

    详细解释:

    在之前的版本中,只有一个drawable,而2.1版本中有drawable-mdpi、drawable-ldpi、drawable-hdpi三个,这三个主要是为了支持多分辨率。

      drawable- hdpi、drawable- mdpi、drawable-ldpi的区别:

      (1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854)

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

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

      系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。

      在开发程序时为了兼容不同平台不同屏幕,建议各自文件夹根据需求均存放不同版本图片。

     

    Android的icon尺寸

    在运行时,程序为最佳显示效果提供了三种方法:

    1.图片缩放

    基于当前屏幕的精度,平台自动加载任何未经缩放的限定尺寸和精度的图片。如果图片不匹配,平台会加载默认资源并且在放大或者缩小之后可以满足当前界面的显示要求。例如,当前为高精度屏幕,平台会加载高精度资源(如图片),如果没有,平台会将中精度资源缩放至高精度。

    2.自动定义像素尺寸和位置

    如果程序不支持多种精度屏幕,平台会自动定义像素绝对位置和尺寸值等,这样就能保证元素能和 精度160的屏幕上一样能显示出同样尺寸的效果。例如,要让WVGA高精度屏幕和传统的HVGA 屏幕一样显示同样尺寸的图片,当程序不支持时,系统会对 程序慌称屏幕分辨率为320×533,在(10,10)到(100,100)的区域内绘制图形完成之后,系统会将图形放大到(15,15)到 (150,150)的屏幕显示区域。

    3.兼容更大尺寸的屏幕

    当前屏幕超过程序所支持屏幕的上限时,定义supports- screens元素,这样超出显示的基准线时,平台在此显示黑色的背景图。例如,WVGA 中精度屏幕上,如程序不支持这样的大屏幕,系统会谎称是一个320×480的,多余的显示区域会被填充成黑色。

    但为了达到最佳的显示效果,最好的方法还是设计多套图片。那就有必要对于所有的屏幕依据精度值进行分级(高中低),之后再设计三套icon:


    •/res/menu                 存放Menu

    •/res/values               存放修饰性资源:字串,颜色,单位,风格和主题

    详细解释:

    values文件可以被编译成很多种类型的资源的XML文件。注意: values文件夹不像其他的res/文件夹,它可以保存任意数量的文件,这些文件保存了要创建资源的描述,而不是资源本身。XML元素类型控制这些资源应该放在R类的什么地方。 尽管这个文件夹里的文件可以任意命名,但还是要遵循一定的惯例(文件命名的惯例是将元素类型包含在该名称之中):

    array.xml 定义数组

    colors.xml 定义color drawable和颜色的字符串值(color string values)

    使用Resource.getDrawable()和Resources.getColor()分别获得这些资源。

     dimens.xml定义尺寸值(dimension value)。

    使用Resources.getDimension()获得这些资源。

     strings.xml定义字符串(string)值

    使用Resources.getString()或者Resources.getText()获取这些资源。

    styles.xml 定义样式(style)对象

    res/xml/ 任意的XML文件,在运行时可以通过调用Resources.getXML()读取。

    res/raw/ 直接复制到设备中的任意文件。它们无需编译,添加到你的应用程序编译产生的压缩文件中。要使用这些资源,可以调用Resources.openRawResource(),参数是资源的ID,即R.raw.somefilename。

    自动生成的R class 在项目文件夹的gen文件夹里面有个R.java,我们平常引用的资源主要引用这个类的变量。 注意:R类是自动生成的,并且它不能被手动修改。当资源发生变动时,它会自动修改。

    在代码中使用资源:下面是一个引用资源的语法:R.resource_type.resource_name 或者 android.R.resource_type.resource_name 其中resource_type是R的子类,保存资源的一个特定类型。resource_name是在XML文件定义的资源的name属性,或者有其他文件类型为资源定义的文件名(不包含扩展名,这指的是drawable文件夹里面的icon.png类似的文件,name=icon)。Android包含了很多标准资源,如屏幕样式和按钮背景。要在代码中引用这些资源,必须使用android进行限定,如android.R.drawable.button_background。


    •/res/layout                存放UI布局和元素
    •/res/raw                    存放运行时想使用的原始文件

    •/assets                     存放运行时想使用的原始文件

    assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件被预编译,可以存放一些图片,html,js, css等文件。



    R.java文件

    除了原始文件目录/res/raw和/assets以外,其他的资源在编译的时候都会被第三方软件aapt进行处理,一个是把图片和XML文件进行处理,例如把XML编译成为二进制形式;另外处理的目的就是生成R.java文件,这个文件是访问资源时必须要用到的。
    /res目录下面的所有文件都会映射到R.java文件中,以整数Id的形式被标识,相同类型的资源被一个内部类来封装。


    在/res中定义或提供资源时的注意事项:
    1. 同一个类型,或同一文件夹下面的资源不可以使用相同的文件名,也就是说不能用文件扩展名来区别不同的文件,因为R.java中只保留资源的文件名而不管扩展名,所以如果有二个图片一个是icon.png另一个是icon.jpg,那么在R.java中只会有一个R.drawable.icon。另外一个则会无法访问到。


    2. 资源文件的名字必须符合Java变量的命名规则,且不能有大写,只能是'[a-z][0-9]._',否则会有编译错误,因为R.java中的变量Id要与资源中的文件一一对应,也就是说用资源文件名来作为Id的变量名,所以一定要符合Java变量的命名规则,另外它还不能有大写。


    3. 除了SDK支持的folder外,不能再有子Folder,虽不会有编译错误,但是子Folder会被完全忽略,如在/res/layout下在建一个子Folder activity(/res/layout/acitivity/, 那么你在生成的R.java中是看不到activity和其内的内容的。


    4. 对于资源文件的大小有限制,最好不要让单个文件大于1M,这是SDK文档说明的限制,但具体的我没有进行试验(据说2.2版本以后的可支持到10M,不知道是真的还是假的)


    5. 所有/res下面的资源都能通过Resources()并提供Id来访问。


    对于大多数资源在编译时会对文件内容进行特殊处理,以方便Apk在运行时访问。 如果想要运行时使用未经处理的原始资源,可以把资源文件放在/res/raw和/assets目录下面

    展开全文
  • 请问,您是否知道如何在多个资产文件夹合并或合并之前如何排除Android项目资产文件夹中的某些文件?例如:android {sourceSets {main {assets.srcDirs = [fileTree(dir: 'assets1', exclude: 'myfile.txt'), 'assets2...
  • 最近要写一个读取txt的文本,在res目录下新建了一个raw文件夹,并向其中加入了txt文件,但通过R引用时无法引用。在网上查了一下原因是R和Android.R 的区别,R是自己工程包下的,Android.R是系统的包下的。 修改方法...
  • 比如在一个TestDemo的Res/drawable文件夹中,新添加一张图片资源要如何添加。 我直接将图片复制到bin\res\drawable-hdpi或者bin\res\drawable-mdpi中去,然后在eclipse中刷新图片仍然不显示。
  • Android 资源文件夹下的文件不能有大写字符,会导致R.java无法生成   在做图的时候,给图片命名经常会大小写混合命名比较好记,这些图片复制到drawable目录后,如果在xml文件里面调用将有可能导致R.java文件无法...
  • 概述 values-v19/style.xml—对应api19+手机型号在...(有次要实现ios样式的沉浸式通知栏,我运用方法一来实现的,测试没问题,但作为aar导入另一个项目后在android4.1手机上出现了Crash,尝试修复找到了这个问题)
  • 用eclipse开发android,怎么在资源文件夹下添加子文件夹,对多资源文件进行整理归纳。 比如layout文件夹下新建子layout文件夹,将不同xml文件进行分别归纳。 因为工作原因,pc和android都要弄调试一类的,所以用的...
  • Android asset 资源文件夹路径    file:///android_asset/index.html
  • Android assets文件夹资源获取
  • Android res文件夹资源定义及使用.pdf
  • //创建MediaPlayer对象并指定要播放的音乐 player = MediaPlayer.create(this, R.raw.power_of_love); //播放音乐 player.start();
  • drawable文件夹:该文件夹有很多变种,主要是为了适配Android各种屏幕的,适配原则是先看和手机屏幕对应的哪种dpi,然后直接去该文件夹下找对应资源,如果没有就先找更高分辨率的,然后再从最低分辨率的找。...
  • Table 2. Configuration qualifier names. ... 说明:本文档目的为分析android工程res目录下的资源文件夹(drawable,values,layout等)在屏幕适配方面的限定与适配方法。  1、 Res下文件夹命名方式  1. 可用
  • 有时app中res下面的文件太多了想分一下类,如所有的布局文件都在layout文件夹下面,太多的话找起来不方便。一开始我想这个问题大概可以通过配置productFlavor来实现,但是productFlavor中不同的Flavor是互斥的,跟这...
  • android多语言适配--语言对应的资源文件夹名称  众所皆知。Android开发中,res资源文件夹下,可以根据不同的文件名后缀(连接符(-)加限定符)来区别不同的资源。  android在运行时使用动态资源选择机制来加载...
  • Android国际化资源 文件夹命名规范

    千次阅读 2015-11-04 11:19:58
    android多国语言文件夹文件汇总如下: 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values-zh-rHK 英语(美国):values-en-rUS 英语(英国):values-en-rGB 英文...
  • Android项目文件夹里面,主要的资源文件是放在res文件夹里面的,下面为大家详细介绍下各个资源文件的作用,感兴趣的朋友可以参考下哈
  • gen:为ADT插件自动生成的代码文件保存路径,里面的R.java将保存所有的资源ID。 assets:可以存放项目一些较大的资源文件,例如:图片、音乐、字体等。 res:可以存放项目中所有的资源文件,例如:图片(.png、....
  • Android 资源文件夹 Layout 文件夹Layout文件是存放Android的布局文件的资源文件夹,但是如果你想要在里面创建子文件夹,你会发现xml文件报错。如何在Layout文件夹下方创建Layout的子文件夹。这边我们需要著一个一个...
  • 本demo是结合博客的资源,如有不懂请去看博客 http://blog.csdn.net/u013895206 ,文章是:android 使用gradle导出jar包,并包含assets资源文件夹。谢谢!
  • Android 分辨率 及对应的资源文件夹 硬件情况:7寸平板,density :1.0,工程环境values-hdpi,values-mdpi,values-large,values-xhdpi,系统选择了large文件夹资源; 硬件情况:7寸平板,density...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 83,668
精华内容 33,467
关键字:

安卓资源文件夹