zoukankan      html  css  js  c++  java
  • 第二章:界面和目录结构

    Eclipse和Android虚拟设备管理器概览

    Eclipse正常编码界面和调试界面是不相同的,分别如图:

     

    android虚拟设备如图:

    android项目结构概览

     直接上图:

     更详细的关于res的介绍:

     

     我会一个一个介绍项目中的目录。首先是src

    1. src/文件夹——源代码目录 平时我们写程序,建包建类都是在这里进行,这里存放着项目的所有精华和程序员的一切心血。
    2. gen/文件夹——系统自动生成代码目录 既然是系统自动生成的,所以我们大可不必管它。顺便提一下项目的重建,让系统代码重新自动生成——选中项目,再到eclipse的菜单栏,project->clean..
    3. 3个Android包——开发时提供的jar包存放目录 第一个是Android版本自带的jar包,系统核心内容。第二个同样是SDK更新后出现的,里面存放你要用到的jar包,包括你导入进去的jar包。第三个存放的appcompat的jar包,版本支持用。可能你从lib导入新的jar包后会出现新的以Android开头的目录,放心,这些都是无害的~~ 顺便提一句怎么添加新的jar包——找到项目工程文件目录,进去之后新建一个libs的文件夹,将要导入的jar包放进去。回到eclipse,(记得先将项目刷新一遍)对着项目右键->Propreties->Java Bulid Path->Libraries->右侧的Add JARs->找到自己项目下的libs文件夹,选中要导入的jar包,完成就行了。
    4. assets/文件夹——资源目录 存放系统所要的资源,可以在里面任意的构建目录,但该目录下的资源文件不会再R.java自动生成ID。这些都是与res/文件夹的不同。 存放的资源命名请用小写开头,不然系统不会识别。
    5. bin/文件夹——同样是系统自动生成 build之后里面会生成APK文件,可以直接拿出来用
    6. libs/文件夹——存放自己所需的jar包
    7. res/文件夹——存放图片、布局、字符串等资源 里面的资源会在R.java中自动生成ID(需要在project->Build Automatically前打上勾)    (1)res/drawable-*dpi/  ——系统会根据分辨率来提取不同drawable文件夹里的图标。依次从h-m-l代表分辨率从高到低。当然只放一张在其中一个文件夹中系统也是可以读取的。    (2)res/layout文件夹 ——存放布局文件    (3)res/menu文件夹——存放菜单资源文件。菜单资源文件使用<menu>标签作为根节点。除了<menu>外,还有另外两个标签用于设置菜单项和分组,这两个标签是<item>和<group>。    (4)res/values文件夹——存放数据资源文件。可以存放不同类型的数据。比如arrays.xml、colors.xml、dimens.xml、styles.xml等等。根据版本的不同,也设置了不同的文件夹。
    8. AndroidManifest.xml——系统配置文件 项目的总配置文件,记录应用中所使用的各种组件。这个文件列出了应用程序所提供的功能,在这个文件中,你可以指定应用程序使用到的服务(如电话服务、互联 网 服务、短信服务、GPS服务等等)。另外当你新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此 Activity。AndroidManifest.xml将包含如下设置:application permissions、Activities、intent filters等。
    9. project.properties ——环境文件 记录项目中所需要的环境信息,比如Android的版本等。
    10. 其他 ic_launcher-web.png:这个是为了google Play市场使用展示的图标,它需要的是512×512的高分辨率的图标。 proguard-project.txt project.properties 这两个文件是为了保护Android项目而做的代码混淆使用的。

    Android 项目文件的具体讲解:

         首先看这个 HelloWorld 类。

    public class HelloWorld extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        }
    }

    他继承了 Activity ,前面讲了,一个 Activity 可以想象成一个手机的屏幕,用于展示一屏的内容,所以所有要展示内容的屏幕都要继承 Activity 才能实现,接着覆盖了 onCreate() 方法对该 Activity 进行初始化 setContentView(R.layout. main ); 设置了使用 main.xml 这个布局文件作为当前 Activity 的内容展示 .main.xml 就是放在 res 下, layout 下面的文件 xml 布局文件 , 我们可以直接使用 R.layout.main 进行直接的引用他,这也是 Android 亮点的地方,省得我们为了引用一个 xml 文件再使用 File 类去读取,我们要做的只是把这个 xml 文件的索引给 Android ,他会自动的帮我们找到它并使用 .

     2. main.xml 布局文件

    Xml代码  
     
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <TextView  
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="@string/hello"
        />
    </LinearLayout>

    布局文件的内容不多 , 开始就是一个 LinearLayout 组件的定义,然后在这个 LinearLayout 放了一个用于显示文字的 TextView 。现在来看一下几个参数 :

    • .      LinearLayout 一个线性布局面板,只能垂直和水平布局, android:orientation="vertical" 代表里面的子元素只能垂直排列,而使用 android:orientation="horizontal" 就标识里面的子元素水平排列 ..
    • .      android:layout_width 定义当前视图占的宽度,这里是 fill_parent 即为充满整个屏幕。而设置成 wrap_content 会根据当前视图的大小只能的改变宽度
    • .      android:layout_height 是定义视图的高度,这里也是填充整个屏幕。而设置成 wrap_content 会根据当前视图的大小只能的改变高度。
    • .      android:text 是这是 TextView 要显示的文本,可以是字符串,也可以是一个字符串的引用,这里是一个引用,引用的是 strings.xml 定义好的名字为 hello 的字符串

    3.      string.xml 介绍。

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="hello">Hello World, HelloWorld!</string>
        <string name="app_name">HelloWorld</string>
    </resources>

    这里我们看看就明白了,只要是定义一个个的 K-V 的键值对,供其他地方使用。比如上面的 main 中对 hello 的引用。这对字符的统一管理和国际化有很大的意义。

    4.      AndroidManifest.xml 的介绍

    Xml代码  
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.flysnow"
          android:versionCode="1"
          android:versionName="1.0">
        <application android:icon="@drawable/icon" android:label="@string/app_name">
            <activity android:name=".HelloWorld"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
        </application>
        <uses-sdk android:minSdkVersion="8" />
    
    </manifest>

    这是项目的重要配置文件,诸如 Activity ,权限, Intent 等都在这里配置

    Package: 定义了该应用的包。

    android:versioCode 定义了应用的版本号

    android:versionName 定义了应用的版本名字

    application 标签定义了一个应用,一个项目最多有一个 Application 标签。

    android:icon="@drawable/icon" 定义了应用的图标 引用资源文件中的 icon 图片

    android:label="@string/app_name" 定义了应用的名称

    activity 标签定义了一个 Activity ,你的每一个 Activity 必须在这里定义,否则不能运行 .

    Android:name 定义了 Activity 的类名 , 这里的 .HelloWorld 是以上面的 Package 定义为基础的,也就是 Package(com.flysnow) 加上这个 android:name(.HelloWorld) 要能定位到这个 Activity(com.flysnow.HelloWorld) ,否则就是找不到 .

    android:label 定义了该 Activity 的标题

    intent-filter 定义一个 Intent 过滤器,用于标记对应的 Activity ,以便 Android 系统能找到该 Activity ,定义的是隐性的 Intent ,主要使用两个子标签 action 和 category 来区分每个 Intent 。

    最后的 <uses-sdk android:minSdkVersion="8" /> 就是定义应用的最低 SDK 的级别,前面讲过,,,想看的可以参见

  • 相关阅读:
    枚举扩展,感觉用处很大
    基础缓存操作类
    ASP.NET 4.0 全局取消表单危险字符验证
    拦截所有经过IOC的方法
    关于使用EPPlus插入列,名称管理器公式失效问题案列分析
    IocFactory容器实体
    线程扩展
    IEnumerable扩展支持Add,Remove等操作
    自定义特性。配合枚举使用棒棒哒
    在数据仓储的情况下进一步封装数据库基础操作,此版本为异步版本
  • 原文地址:https://www.cnblogs.com/engine1984/p/4120227.html
Copyright © 2011-2022 走看看