《Android编程权威指南》学习记录(一)

《Android编程权威指南》学习记录(一)_第1张图片
Android编程权威指南

<献词
献给Donovan。他很忙,但他知道什么时候该用Fragment。
——B.H

<聚焦习惯而不是目标


Android 应用初体验

我们要做一个测试用户地理知识的软件 GeoQuiz,然后我们会从中学到Android开发基础知识

1.1 应用基础

这部分算是简单的需求分析,我们的应用需要什么,有哪部分组成。
在开发一个应用之前我们要对自己的应用有足够的认识,需要用到什么框架,哪些技术点,哪些jar包等

GeoQuiz应用是由一个Activity 和一个布局(Layout)组成。

Activity

activity 是Android SDK中 Activity类的一个具体实例,负责管理用户与信息屏的交互。应用的功能是通过编写一个个Activity子类来实现的。

布局(Layout)

布局 定义了一系列用户界面对象以及它们显示在屏幕上的位置。

1.2 创建 Android项目

首先我们来创建一个Android项目。Android项目包含组成一个应用的全部文件。(书中用的IDE是 Eclipse,所以具体创建项目的步骤这里就不写了。)

注意:
1.包名命名规则:包名要遵循“DNS反转” 约定,即将企业组织或公司的域名反转后,在尾部附加上应用名称。遵循此约定可以保证包名的唯一性。
2.Activity命名规则:创建子类activity时,最好是遵守“名字+Activity后缀” 如:QuizActivity=Quiz+Activity。尽管不是必需的,但是建议遵守这一命名约定。
3.布局命名规则:将activity名称的单词顺序颠倒过来,并全部转换为小写字母,然后在单词间添加下划线。如:activity_quiz。

这里加一个链接,大神总结的 Android 命名规范

1.3 Eclipse 工作区导航

在这贴一张AS(Android Studio)工作区


《Android编程权威指南》学习记录(一)_第2张图片
Android Studio工作区

Eclipse即将从Android历史舞台退出,所以大家还是多学习AS就好!

1.4 用户界面设计

这里我在插一嘴,Material Design,Google推出的全新的设计语言

开始上代码

默认的activity布局(activity_quiz.xml)



    

我们看到,应用activity的布局默认定义了两个组件(widget)RelativeLayoutTextView

组件:
是组成用户界面的构造模块。组件可以显示文字或图像,与用户交互,甚至是布置屏幕上的其他组建。
按钮(Button),文本输入控件(EditText),选择框(CheckBox)等都是组件。
Android SDK内置了多种组件,通过配置各种组建可获得所需要的用户界面及行为。每一个组件是View类或其子类(如TextView 或 Button)的一个具体实例。


现在开始GeoQuiz应用介绍

QuizActivity的用户界面需要下列五个组件:

  • 一个垂直LinearLayout组件;
  • 一个TextView组件;
  • 一个水平LinearLayout组件;
  • 两个Button组件;

看看以上组件是如何构成QuizActivity用户界面的


《Android编程权威指南》学习记录(一)_第3张图片
布置并显示在屏幕上的组件

然后看看这个布局代码:



    
    
        

求助,谁知道这个问题怎么解决。我用Eclipse的代码全部复制过来就是原来的样子显示。我找了一下午没找到办法,所以下次代码只能在Eclipse中写了。不能让我写完代码了还一个一个加空格,手动格式化显示吧?```

视图层级结构

《Android编程权威指南》学习记录(一)_第4张图片
布局中组件及属性的层级结构

需要注意的是,根元素(当前布局中就是最上面的LinearLayout组件)必须指定Android XML资源文件的命名空间属性(命名空间属性就是xmlns,XML Namespaces),当前就是xmlns:android=" http://schemas.android.com/apk/res/android "。

LinearLayout组件继承自View子类的ViewGroup组件。ViewGroup组件是一个包含并配置其他组件的特殊组件。在这先灌输一下Android的五大组件LinearLayout,RelativeLayout,FrameLayout,TableLayout,AbsoluteLayout(这个是绝对布局,正常情况下不会用到)

组件属性

属性 可以看作是如何配置 组件 的指令。
下面我们来看一些常用属性。

  • android:layout_width和android:layout_height:
    几乎每类组件都需要这两个属性,他们通常被设置为一下两种属性值之一。
    *match_parent:视图与其父类视图大小相同
    *wrap_content:视图将根据其内容自动调整大小。
    (以前还有一个fill_parent属性值,等同于match_parent,目前已废弃不用。)
  • android:orientation属性
    它是LinearLayout组件特有的属性,可以指定子组件在屏幕上排列的方向。其两个属性值vertical 和 horizontal分别表示垂直排列和水平排列。
  • android :text属性
    该属性指定组件显示的文字内容。这里需要知道android:text的属性最好是从strings的XML文件中引用过来的字符串资源(下面会学习),不要在代码中以硬编码的形式赋值。

创建字符串资源

每个项目都包含一个名为strings.xml的默认字符串文件。当我们要添加字符串资源时候可以在这里定义,而我们只需要@string/在strings.xml里定义的名字 来引用即可。如:

正确
android:text="@string/true_button"
这时候android:text的属性值就是“正确”。

从布局XML到视图对象

XML元素是如何转换为视图对象的?

答案就在Activity的onCreate(Bundle)方法中的setContentView()中。
我们只需要把我们创建好的XML布局ID传给setContentView()方法中即可。如:
setContentView(R.layout.activity_quiz)

该方法生成指定布局的视图并将其放置在屏幕上。布局视图生成后,布局文件包含的组件也随之以各自的属性定义完成实例化。

资源与资源ID

布局 是一种 资源 。资源是应用非代码形式的内容,比如图像文件,音频文件以及XML文件等。项目中所有的资源文件都存放在目录res的子目录下。

这里我们要学习一个新的属性:android :id ="@+id/id名"

当我们需要某一个控件的时候,可以用它的id来查找获取。(后面会讲)

组件的实际应用

按照顺序来写:

  • 首先,我们要定义一个组件类型的成员变量,并且给变量取名

private Button mTrueButton;

  • 然后通过Activity的方法引用已生成的组件,方法为:

public View findViewById(int id)
该方法接受组件的资源ID作为参数,返回一个View(视图)对象。

mTrueButton=(Button)findViewById(R.id.true_button);

这样,我们就已经获得了该组件的实例变量mTrueButton

设置监听器

Android应用属于典型的事件驱动类型 。事件驱动类型应用启动后,即开始等待行为事件的发生,如用户点击某个按钮。

应用等待某个特定事件的发生,也可以说该应用正在“监听”特定事件。为响应某个事件而创建的对象叫做监听器(listener)监听器 是实现特定监听器接口 的对象,用来监听某类事件的发生。

无需自己编写,Android SDK已经为各种事件内置开发了很多监听器接口。当前应用需要监听用户的按钮“单机”事件,因此监听器需实现 View.OnClickListener 接口

mTrueButton.setOnClickListener(new View.OnClickListener(){  
 @Override 
 public void onClick(View v){
  这里写点击后实现的方法
 } 
});
  • 使用匿名内部类
    SetOnClickListener(OnClickListener)方法的监听器参数是一个匿名内部类
    用匿名内部类的两大好处:

1,因为匿名内部类的使用,我们可在同一处实现监听器方法,代码更清晰可读。
2,事件监听器一般只在一处使用一次,使用匿名内部类可避免不必要的命名类实现。

  • 创建提示消息

Toast 是Android中显示消息的机制,它没有交点,而且有时间限制。过一定时间就会自动消失。

通过调用来自Toast类的一下方法创建toast:

 public static Toast makeText(Context context,int resId,int duration)

该方法的Context参数通常是Activity的一个实例(Activity本身就是Context的子类)。
第二个参数是toast待显示字符串消息的资源ID。Toast类必须利用context才能找到并使用字符串的资源ID。
第三个参数通常是两个Toast常量中的一个用来指定toast消息显示的持续时间。
创建Toast后,可通过调用Toast.show()方法使toast消息显示在屏幕上。

Toast.makeText(QuizActivity.this,"我是吐司",Toast.LENGTH_SHORT).show();

使用模拟器运行应用

虽然Eclipse和Android Studio都自带有模拟器,但是我还是建议大家用手机测试,或者用Genymotion测试。因为自带的,真的好慢。(不过据说AS2.2的模拟器已经很快了)

深入学习:Android编译过程

android编译过程

《Android编程权威指南》学习记录(一)_第5张图片
Android程序编译过程

你可能感兴趣的:(《Android编程权威指南》学习记录(一))