Android中项目中各个文件夹的含义和用途详解

1.src:存放所有的*.java源程序。

2.gen:为ADT插件自动生成的代码文件保存路径,里面的R.java将保存所有的资源ID。

3.assets:可以存放项目一些较大的资源文件,例如:图片、音乐、字体等。

4.res:可以存放项目中所有的资源文件,例如:图片(*.png、*.jpg)、文本等。

5.res/drawable-hdpi:保存高分辨率图片资源,可以使用Resources.getDrawable(id)可以获得资源类型。

6.res/drawable-ldpi:保存低分辩率图片资源,可以使用Resources.getDrawable(id)可以获得资源类型。

7.res/drawable-mdpi:保存中等分辨率图片资源,可以使用Resources.getDrawable(id)可以获得资源类型。

8.res/layout:存放所有的布局文件,主要是用于排列不同的显示组件,在Android程序中要读取此配置。

9.res/values:   存放一些资源文件的信息,用于读取文本资源,在本文件夹之中有一些约定的文件名称:

.attrs.xml:自定义属性值的:具体可以参考 http://blog.csdn.net/jiangwei0910410003/article/details/17006087    · arrays.xml:定义数组数据;

定义如下:

<?xml version="1.0" encoding="utf-8" ?>

<resources>     <string-array name="MyArray">          

<item name="1,35,3">第一</item>           

<item name="5,34,0">第二</item>           

<item name="1,30,1">第三</item>           

<item name="2,31,0">第四</item>     

</string-array> </resources>

在代码中读取:

Resources r = this.getResources();

String[] ary = r.getStringArray(R.array.MyArray);

   · colors.xml:定义表示颜色的数据;    

   · dimens.xml:定义尺度,可以使用Resources.getDimension()获得这些资源;   

   · strings.xml:定义字符串,可以使用Resources.getString()或Resources.getText()方法获得这些资源;   

   · styles.xml:定义显示的样式文件;

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

     <!--         Base application theme, dependent on API level. This theme is replaced        

                    by AppBaseTheme from res/values-vXX/styles.xml on newer devices.     -->    

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

          <!--             Theme customizations available in newer API levels can go in            

                             res/values-vXX/styles.xml, while customizations related to            

                             backward-compatibility can go here.         -->      

    </style>    

<!-- Application theme. -->    

     <style name="AppTheme" parent="AppBaseTheme">        

          <item name="android:windowNoTitle">true</item>    

     </style>    

<!-- 全局的Activity切换动画 -->    

   <style name="MyTheme" parent="AppTheme">    

        <item name="android:windowAnimationStyle">@style/ActivityAnimation</item>

   </style>    

   <style name="ActivityAnimation">        

<!--  打开activity,设置activity进入展示动画  -->        

     <item name="android:activityOpenEnterAnimation">@anim/pubblico_activity_anim_push_right_in</item>        

<!--  打开activity,设置上个activity离开动画  -->          

     <item name="android:activityOpenExitAnimation">@anim/pubblico_activity_anim_push_left_out</item>        

<!--  结束activity,设置上个activity进入动画  -->          

     <item name="android:activityCloseEnterAnimation">@anim/pubblico_activity_anim_push_left_out</item>        

<!--  结束activity,设置当前activity离开动画  -->          

     <item name="android:activityCloseExitAnimation">@anim/pubblico_activity_anim_push_right_out</item>      

  </style>

</resources>

10.res/raw:自定义的一些原生文件所在目录,像音乐、视频等文件格式。存放直接复制到设备中的任意文件。它们无需编译,添加到你的应用程序编译产生的压缩文件中。要使用这些资源,可以调用Resources.openRawResource(),参数是资源的ID也可以用,即R.raw.somefilename,Resources.getRawResource()方法可以获得这些资源。

11.res/xml:用户自定义的XML文件,所有的文件在程序运行时编译到应用程序之中,在程序运行时可以使用Resources.getXML()方法获取。

12.res/anim:用于定义动画对象。存放定义了补间动画(tweened animation)或逐帧动画(frameby frame animation)的XML文件。(该目录下也可以存放定义property animations的XML文件,但是最好还是分开存放)

13.res/animator:存放定义了propertyanimations(android 3.0新定义的动画框架)的XML文件

14.res/color/:存放定义了颜色状态列表资源(ColorState List Resource)的XML文件

15.res/drawable/:存放定义了图片状态列表资源(ColorState List Resource)的XML文件

16.res/menu/:存放定义了应用程序菜单资源的XML文件。正确创建文件的方法:new Folder,名字menu,new Other——Android——XML,选择menu类型,填写名称,确定即可。菜单资源文件必须放在res/menu目录中。菜单资源文件必须使用<menu>标签作为根节点。除了<menu>标签外,还有另外两个标签用于设置菜单项和分组,这两个标签是<item>和<group>。

注意:
对于res/color和res/drawable这两个文件中的内容在这作一下详解:
首先说一下color文件夹,在这个文件夹下放的是color_selector.xml等文件,主要是用于背景色的selector,比如TextView中的textColor属性,点击改变TextView中的字体颜色,在这个文件中的文件color_selector.xml中定义如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_window_focused="false"
        android:color="@color/not_pressed" />
    <item
        android:state_selected="false"
        android:state_focused="false"
        android:state_pressed="false"
        android:color="@color/not_pressed"/>
    <item
        android:state_selected="true"
        android:color="@color/pressed" />
    <item
        android:state_focused="true"
        android:color="@color/pressed" />
    <item
        android:state_pressed="true"
        android:color="@color/pressed" />
</selector>

主要的属性是android:color引用不同的色值,而这些色值是在values/color.xml文件中定义的,比如:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="not_pressed">#000000</color>
    <color name="pressed">#ffffff</color>
</resources>
同时也可以发现,在color_selector.xml中没有android:drawable属性,我不知道Android中是根据什么判断什么时候有android:drawable属性,什么时候有android:color属性的
下面来看一下res/drawable文件夹中的文件,这个文件夹中的文件drawable_selector.xml,主要是用于背景图的使用,Button中的android:background,点击改变背景,drawable_selecor.xml文件的定义:

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_window_focused="false"
        android:drawable="@drawable/info_collect_btn_normal_bg"/>
    <item
        android:state_selected="false"
        android:state_focused="false"
        android:state_pressed="false"
        android:drawable="@drawable/info_collect_btn_normal_bg" />
    <!-- Non focused states -->
    <item
        android:state_selected="true"
        android:drawable="@drawable/info_collect_btn_pressed_bg" />
    <!-- Focused states -->
    <item
        android:state_focused="true"
        android:drawable="@drawable/info_collect_btn_pressed_bg" />
    <!-- Pressed -->
    <item
        android:state_pressed="true"
        android:drawable="@drawable/info_collect_btn_pressed_bg" />
</selector>

这里的info_collect_btn_normal_bg和info_collect_btn_pressed_bg是图片资源,放在drawableXX文件夹下的。
同时也发现了在drawable_selector.xml中没有android:color属性,结合上面的color_selector.xml中没有android:drawable属性,知道了Android应该是根据文件夹来判断的,在color文件夹下的文件有android:color属性,在drawable文件夹下的文件有android:drawable属性
同时还要注意的是:像textColor和background属性引用到的文件不能乱引用,比如textColor引用了drawable_selector.xml,background引用了color_selector.xml会报错的。所以要注意使用。
但是现在有个问题:假设Button现在想点击变成绿色,不点击变成红色,这时候怎么办?
首先肯定要用background的属性-->那肯定就要用drawable_selector.xml文件引用,所以在drawable_selector_.xml中将android:drawable="@drawable/info_collect_btn_normal_bg"改成android:drawable="@color/not_pressed"即可,这里可能有个误解就是android:drawable只能引用drawable资源,但是事实证明这个误解是多余的!原理可以参考attr详解中。

本文转载自:http://blog.csdn.net/jiangwei0910410003/article/details/16985955
时间: 2024-10-03 22:53:33

Android中项目中各个文件夹的含义和用途详解的相关文章

Linux中,根目录下文件夹的含义

linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示 /lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件 /sbin 系统管理命令,这里存放的是系统管理员使用的管理程序 /tmp 公用的临时文件存储点 /root 系统管理员的主目录(呵呵,特权

c++中.dll与.lib文件的生成与使用的详解

两种库: ? 包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library.? 包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library.共有两种链接方式: ? 动态链接使用动态链接库,允许可执行模块(.dll文件或.exe文件)仅包含在运行时定位DLL函数的可执行代码所需的信息.? 静态链接使用静态链接库,链接器从静态链接库LIB获取所有被引用函数,并将库

在项目中使用PHP include文件夹

很多情况,公司有一类型的代码需要统一部署,如: 1.  数据库配置文件 2.  公司统一框架 3.  其他统一程序代码 对这部分代码我们在开发过程中需要统一物理路径.避免在开发.测试.预发布.正式环境不一致,每次同步代码都需要额外修改配置文件.因此可以使用php配置中的include_path目录来配置该部分功能. 配置方法如下: 1.  修改php.ini中 include_path配置: WIN环境:include_path= ".;D:\htdocs\th_include" LI

Android Studio-Gradle项目中添加JNI生成文件(.so文件)

当使用gradle时,添加.so和jar包遇到报错: java.lang.UnsatisfiedLinkError: Couldn't load faceppapi: findLibrary returned null 解决办法是将build.gradle写成如下形式: apply plugin: 'android' android { compileSdkVersion 19 buildToolsVersion "19.0.0" defaultConfig { minSdkVersi

Android MediaProvider--文件管理:必现,文件管理器中新建几个文件夹,批量删除后,连接电脑查看仍有部分文件夹未删除

问题描述: [测试步骤]:1.进入文件管理器中,新建几个文件夹,然后批量全选这些文件夹--删除: 2.手机连接电脑,在电脑端查看文件显示. [测试结果]:电脑端查看仍有部分文件夹未删除.插拔USB线几次,在电脑端重新查看,仍显示. [预期结果]:电脑端不应显示已删除的文件夹. [复现概率]:100%(若第一次未复现,步骤1.2重新操作即可复现) [备注]:在文件管理中点击"搜索",也能搜索出这些文件夹. 按以下步骤更容易复现 1.添加一个本地文件夹,删除新添加的文件夹 2.再新建另一文

Unity中所有特殊的文件夹

1. 隐藏文件夹以.开头的文件夹会被Unity忽略.在这种文件夹中的资源不会被导入,脚本不会被编译.也不会出现在Project视图中.2. Standard Assets在这个文件夹中的脚本最先被编译.这个文件夹中的脚本会被导出到Assembly-CSharp-firstpass, Assembly-UnityScript-firstpass 或 Assembly-Boo-firstpass项目中,依语言而定. 参考http://docs.unity3d.com/Documentation/Ma

如何在Android Studio项目中导入开源库?

前两天,谷歌发布了Android Studio 1.0的正式版,也有更多的人开始迁移到Android Studio进行开发.然而,网上很多的开源库,控件等还是以前的基于Eclipse进行开发,很多人不知道怎么导入到自己的基于Android Studio项目中来,微博上也有人私信我,让我来写写,正好今天回来的比较早,就写写吧.主要介绍一下常见的一些导包的场景. 前言 --project //项目目录 | build.gradle //项目的gradle配置文件 | settings.gradle

解决android studio项目中Failded to sync Gradle project &#39;XXXX&#39; Cause:failed to find target with hash string &#39;android-16&#39;问题

之前在github上通过import module导入一个项目,结果报错,提示找不到sdk相应的版本xx,而我的compileSdkVersion明明写的是23不是xx,查了半天也没解决.最后只好下载了那个版本的sdk. 今天导入SlidingMenu的module的时候,又遇到了这个问题.  问题: Cause:failed to find target with hash string 'android-16' in: E:\sony\Android\sdk failed to find B

Android Studio 项目中集成百度地图SDK报Native method not found: com.baidu.platform.comjni.map.commonmemcache.JNICommonMemCache.Create:()I错误

Android Studio 项目中集成百度地图SDK报以下错误: 1 java.lang.UnsatisfiedLinkError: Native method not found: com.baidu.platform.comjni.map.commonmemcache.JNICommonMemCache.Create)I 2 at com.baidu.platform.comjni.map.commonmemcache.JNICommonMemCache.Create(Native Met