《第一行代码》学习笔记——第1章 开始启程,你的第一行Android代码
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,即想要打印的具体内容。
}
《第一行代码》学习笔记——第1章 开始启程,你的第一行Android代码的更多相关文章
- 第一章:开始启程-你的第一行Android代码
Android 系统为开发者提供了什么? 四大组件 活动(Activity):界面 服务(Service):后台默默运行 广播接收器(Broadcast Receiver):接收.发送广播消息 内容提 ...
- The Road to learn React书籍学习笔记(第三章)
The Road to learn React书籍学习笔记(第三章) 代码详情 声明周期方法 通过之前的学习,可以了解到ES6 类组件中的生命周期方法 constructor() 和 render() ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二章:矩阵代数
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二章:矩阵代数 学习目标: 理解矩阵和与它相关的运算: 理解矩阵的乘 ...
- JVM学习笔记-第六章-类文件结构
JVM学习笔记-第六章-类文件结构 6.3 Class类文件的结构 本章中,笔者只是通俗地将任意一个有效的类或接口锁应当满足的格式称为"Class文件格式",实际上它完全不需要以磁 ...
- 《Java核心技术·卷Ⅰ:基础知识(原版10》学习笔记 第5章 继承
<Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 目录 <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 5.1 类.超类和子类 5.1 ...
- 两千行PHP学习笔记
亲们,如约而至的PHP笔记来啦~绝对干货! 以下为我以前学PHP时做的笔记,时不时的也会添加一些基础知识点进去,有时还翻出来查查. MySQL笔记:一千行MySQL学习笔记http://www.cnb ...
- Stealth视频教程学习笔记(第二章)
Stealth视频教程学习笔记(第二章) 本文是对Unity官方视频教程Stealth的学习笔记.在此之前,本人整理了Stealth视频的英文字幕,并放到了优酷上.本文将分别对各个视频进行学习总结,提 ...
- CSS3秘笈第三版涵盖HTML5学习笔记1~5章
第一部分----CSS基础知识 第1章,CSS需要的HTML HTML越简单,对搜索引擎越友好 div是块级元素,span是行内元素 <section>标签包含一组相关的内容,就像一本书中 ...
- 一千行MySQL学习笔记 (转)
出处: 一千行MySQL学习笔记 /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权 ...
随机推荐
- java实现栈与队列
一.栈 栈是一种特殊的线性表.其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行.(先进后出) 访问权限:栈限制了访问权限,只可以访问尾节点,也就是最后添加的元素 即栈顶的元素 /** * ...
- Android 坐标系和 MotionEvent 分析、滑动
1.Android坐标系 在Android中,屏幕最左上角的顶点作为Android坐标系的原点,这个点向左是X轴正方向,这个点向下是Y轴正方向. 系统提供了getLocationOnScreen(in ...
- 过滤器中的chain.doFilter(request,response)
Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码.做一些业务逻辑判断等.其工作原理是,只要你在web.xml文件配置好要 ...
- chrome远程调试真机上的app
chrome远程调试真机上的app 看来要上真机了...
- C# 进制转换 (没有数值的长度限制)
曾经在大学时做过一个c的进制转换算法,那时由于技术的局限性,数值的大小受到限制(系统数据类型长度限制),多年以后,自己那台学习机陈旧后感觉要报废了,整理了一下里面的东西,偶尔在一个角落里发现了这个转换 ...
- IIS集成模式下,URL重写后获取不到Session值
近期给公司网站添加了伪静态功能,但是今天发现了在伪静态的页面中,Session值是获取不到的. 原因是在伪静态请求的时候,Session请求被“过滤”掉了. 开始是把web.config文件中的mod ...
- CCNA网络工程师学习进程(3)常规网络设计模型与基本的网络协议
本节介绍分层的网络设计模型与基本的网络协议,包括ARP协议,ICMP协议和IP协议. (1)三层网络架构: 一个好的园区网设计应该是一个分层的设计.一般分为接入层.汇聚层(分布层).核 ...
- JsBridge实现Javascript和Java的互相调用
前端网页Javascript和Native互相调用在手机应用中越来越常见,JsBridge是最常用的解决方案. 在Android开发中,能实现Javascript与Native代码通信的,有4种途径: ...
- Reporting Service 没有权限登陆
在配置好Reporting Service之后,登陆Report Mananger( http://localhost/Reports/Pages/Folder.aspx)出现一个异常,本地用户没有权 ...
- 让BI告诉你:圣诞老人去哪了?
刚看到一篇关于圣诞节BI分析的文章,觉得很有意思,特来翻译了下和大家一起分享(可惜的是文章发布的时间有点久). 伴随着圣诞节即将到来的日子,POWER BI团队来回答大家最为关注的一个问题:圣诞老人到 ...