1.3 创建你的第一个Android项目

1.3.1 创建HelloWorld项目

1、Application Name代表应用名称,手机上显示的就是它;

2、Project Name代表项目名称,其显示在Eclipse中;

3、Minimum Required SDK是指程序最低兼容版本,Compile With是指程序编译版本;

1.3.3 分析你的第一个Android程序

1、src 是放置我们所有Java代码的地方;

2、gen这个目录里的内容是自动生成的,主要有一个R.java文件,你在项目中添加的任何资源都会在这里生成一个相应的资源id。这个文件永远不要手动去修改它;

3、assets这个目录用的不多,主要存放一些随程序打包的文件,在你的程序运行的时候可以动态的读取到这些文件的内容。并且,如果你的程序中使用到了WebView加载本地网页的功能,所有网页相关的文件也都存放在这个目录下;’

4、bin这个目录主要包含一些在编译时自动生成的文件。其中,安装包就在这个文件中;

5、libs目录,如果你的项目中有使用到第三方Jar包,就需要把这些Jar包都放在libs目录下,放在这个目录下的Jar包都会被自动添加到构建路径中去;

6、res目录,简单点说,你在项目中使用到的所有图片,布局,字符串等资源都是放在这个目录下的,前面提到的R.java中的内容也是根据这个目录下的文件自动生成的;

7、AndroidManifest,xml这是你整个Android项目的配置文件,你在程序中定义的所有四大组件都需要在这个文件里注册。另外还可以在这个文件中给应用程序添加权限声明,也可以重新制定你创建项目时指定的程序最低兼容版本和目标版本。’

8、project.properties这个文件就是通过一行代码指定了编译程序时所使用的SDK版本。我们这个HelloWorld项目使用的是API 14,你也可以在这里改成其他版本试一试;

9、接下来我们来分析HelloWorld项目时如何运行起来的,打开AndroidManifest,xml这个文件,找出这个代码:

<activity
            android:name="com.example.helloworld.HelloWorldActivity"
            android:label="@string/app_name" >
            <intent-filter>

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

<category android:name="android.intent.category.LAUNCHER" />                //这两行代码表示HelloWorldActivity是这个项目的主活动,具体什么意思以后再说

</intent-filter>
        </activity>

说明:这个代码表示对HelloWorld这个活动进行注册,没有在AndroidManifest.xml里注册的活动是不能使用的。

10、在介绍Android四大组件的时候说过,活动是Android应用程序的门面,凡是在应用程序中你看到的东西,都是放在活动中的。所以,当我们打开程序的时候,你看到的东西实际上就是HelloWorldActivity这个活动。以下是这个活动的代码:

package com.example.helloworld;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class HelloWorldActivity extends Activity {                                            //表示HelloWorldActivity继承自Activity。Activity是Android系统提供的一个活动基                                                                                                                      类,我们项目中所有的活动都必须要继承它才能拥有活动的特性。

@Override          
    protected void onCreate(Bundle savedInstanceState) {                          //onCreate()方法是一个活动被创建时必定要执行的方法
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hello_world);                                     //此处调用的setContentView()方法,就是这个方法给当前的活动引入了一个布局
    }

@Override     
    public boolean onCreateOptionsMenu(Menu menu) {                                //创建菜单,详细后期补充
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.hello_world, menu);
        return true;
    }
    
}

看完这个代码发现里面并没有HelloWorld字样,那在活动中也就是在程序界面中显示的HelloWorld!是在哪里定义的呢?

其实Android程序设计讲究逻辑和视图分离,因此是不推荐在活动中直接编写界面的,更加通用的一种做法是,在布局文件中编写界面,然后在活动中引入进来。那也就是说HelloWorld 定义在hello_world_layout.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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".HelloWorldActivity" >
//上面看不懂没关系,我们来看一看下面的代码

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>

其中TextView是Android系统提供的一个控件,用于在布局中显示文字的。在这个代码中我们发现了HelloWorld字样,但是这个真是在这里定义的吗?其实这里也不是。真正的HelloWorld!字符串也不是在这里定义的。Android不推荐在程序中对字符串进行硬编码,更好的做法是把字符串定义在res/values/string.xml里,然后在布局文件或者代码中引用。下面是strings.xml代码:

<resources>

<string name="app_name">Hello World</string>                           //修改APP名称
    <string name="action_settings">Settings</string>
    <string name="hello_world">Hello world!</string>                         //采用键值对的形式,HelloWorld!值对应了一个叫做hello_world的键。在                                                                                                                                   hello_world_layout.xml布局中就是通过引用了hello_world这个键,才找到相应的值

</resources>

1.3.4 详解项目中的资源

1、res目录:所有以drawable开头的文件夹都是用来放图片的,所有以values开头的文件夹都是用来放字符串的,layout文件夹是用来放布局文件的,menu文件夹是用来放菜单文件的。

2、如何使用这些资源?

比如刚刚说到的strings.xml中找到Hello world !字符串,我们有两种方式可以引用它:

(1)在代码中通过R.string.hello_world 可以获得该字符串的引用;

(2)在XML中通过@string/hello_world可以获得该字符串的引用;

基本的语法就是以上两点,其中string部分是可以替换的,如果是引用的图片资源就可以替换成drawable,如果引用的是布局就可以替换成layout,以此类推。

另外,HelloWorld项目的图标就在AndroidManifest.xml中通过android:icon = "@drawable/ic_launcher"来指定的,而ic_launcher这张图片就在drawable文件夹下,如果想修改项目的图标就在这里改。

1.4 掌握日志日志工具的使用

1.4.2 使用Android的日志工具

1、Log.v()  对应级别 verbose,用于打印那些最为琐碎的,意义最小的日志信息。是Android日志里面级别最低的一种。

2、Log.d()  用于打印一些调试信息,这些信息对你调试程序和分析问题应该是有帮助的。对应级别debug。

3、Log.i()  这个方法用于打印一些比较重要的数据,这些数据应该是你非常想看到的,可以帮助你分析用户行为的那种。对应级别info。

4、Log.w()  这个方法用于打印一些警告信息,提示程序在这个地方可能会有潜在风险,最好去修复一下出现警告的地方,对应级别warn。

5、Log.e()  这个方法用于打印程序中的错误信息。对应级别error。

1.4.3  日志工具怎么使用

public class HelloWorldActivity extends Activity {

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hello_world);
        
        Log.d("HelloWorldActivity","onCreate execute");                        //Log.d中传入两个参数,第一个惨数是tag,一般传入当前的类名,主要用于对打印信息进行过滤。第二个参数是msg,即想要打印的具体内容。
    }

转载于:https://www.cnblogs.com/Backstreet/p/5885253.html

《第一行代码》学习笔记——第1章 开始启程,你的第一行Android代码相关推荐

  1. 第1章:开始启程 - 你的第一行android代码

    1.1 了解全貌--Android王国简介 1.1.1 Android系统架构 Android系统架构分为四层: Linux内核层:Android系统基于Linux内核. 为Android硬件提供底层 ...

  2. 第一行代码学习笔记第六章——详解持久化技术

    知识点目录 6.1 持久化技术简介 6.2 文件存储 * 6.2.1 将数据存储到文件中 * 6.2.2 从文件中读取数据 6.3 SharedPreferences存储 * 6.3.1 将数据存储到 ...

  3. 第二行代码学习笔记——第六章:数据储存全方案——详解持久化技术

    本章要点 任何一个应用程序,总是不停的和数据打交道. 瞬时数据:指储存在内存当中,有可能因为程序关闭或其他原因导致内存被回收而丢失的数据. 数据持久化技术,为了解决关键性数据的丢失. 6.1 持久化技 ...

  4. 第一行代码学习笔记第七章——探究内容提供器

    知识点目录 7.1 内容提供器简介 7.2 运行权限 * 7.2.1 Android权限机制详解 * 7.2.2 在程序运行时申请权限 7.3 访问其他程序中的数据 * 7.3.1 ContentRe ...

  5. 第一行代码学习笔记第五章——详解广播机制

    知识点目录 5.1 广播机制 5.2 接收系统广播 * 5.2.1 动态注册监听网络变化 * 5.2.2 静态注册实现开机广播 5.3 发送自定义广播 * 5.3.1 发送标准广播 * 5.3.2 发 ...

  6. 第一行代码学习笔记第三章——UI开发的点点滴滴

    知识点目录 3.1 如何编写程序界面 3.2 常用控件的使用方法 * 3.2.1 TextView * 3.2.2 Button * 3.2.3 EditText * 3.2.4 ImageView ...

  7. 第一行代码学习笔记第四章——探究碎片

    知识点目录 4.1 碎片是什么 4.2 碎片的使用方式 * 4.2.1 碎片的简单用法 * 4.2.2 动态添加碎片 * 4.2.3 在碎片中模拟返回栈 * 4.2.4 碎片和活动之间进行通信 4.3 ...

  8. 高等数值计算方法学习笔记第4章第一部分【数值积分(数值微分)】

    高等数值计算方法学习笔记第4章第一部分[数值积分(数值微分)] 一.数值积分概论 1.数值求积的基本思想(牛-莱公式找不到原函数,用矩形近似) 2.代数精度的概念 1.上述四个公式的代数精度(梯形,左 ...

  9. 第一行代码第一章——你的第一行Android代码

    第一行代码第一章-你的第一行Android代码 知识点目录 1.1 了解全貌--Android王国简介 * 1.1.1 Android系统架构 * 1.1.2 Android已发布的版本 * 1.1. ...

最新文章

  1. shell中的命令替换和变量替换
  2. QT中button中没有accept()和reject()这两个槽解决办法
  3. ORACLE TEXT DATASTORE PREFERENCE(六)
  4. HDU - 2049 不容易系列之(4)——考新郎(错排问题+组合数学)
  5. windows编辑linux系统文件格式,DOS/Windows和Linux/Unix间的文件格式转换
  6. html文件怎么导出stl文件,各种3D建模软件导出STL文件的小技巧(一)
  7. 为Visual Studio 2010添加HTML5的项目模板
  8. idea 编码扫描插件_代码神器:拒绝重复编码,这款IDEA插件了解一下
  9. oracle数据库将一列的值拼接成一行,并且各个值之间用逗号隔开
  10. php 车牌号,总结关于车牌注意点
  11. 一个故事讲完CPU的工作原理 侵删
  12. [流体力学][NS方程]关于质量、动量、能量的控制方程的推导
  13. 废物利用--旧手机搭建linux服务器
  14. Vue-cli配置代理服务器,解决跨域请求问题
  15. 夜幕下的区块链:揭露区块链评级的猫腻
  16. 【原创】Python 使用jmpy模块加密|加固 python代码
  17. Python+Django+LeanCloud+腾讯云函数学习记录(第一周学习记录)
  18. Fuchsia编译系统的GN结构
  19. html下拉框设置默认值_html下拉框怎么设置默认值
  20. AVI的音视频编码格式

热门文章

  1. CRI HITFM 88.7的网络电台
  2. 哥们别逗 了,写个脚本那真不叫运维自动化! 【转载】
  3. 解决ValueError: bad input shape (xxxx, x)
  4. 一文了解转发与重定向
  5. 小白兔写话_一年级小白兔看图写话
  6. 重积分 | 重积分与大面包(深刻理解)
  7. 最新Kafka教程(包含kafka部署与基本操作、java连接kafka、spring连接kafka以及使用springboot)
  8. B. Infinite Prefixes
  9. PHP 在网页中的运用
  10. PJ331 PJ501超小型封装PFM DC/DC升压稳压器