您的位置:首页 > 移动开发 > Android开发

Android初识

2017-11-23 22:14 127 查看
写在前面的话:

这些材料均来自与《Android权威指南》,最近要进行考试,故对书中的知识点进行罗列,方便查阅。感谢大学老师的教诲,希望各位在学海苦作舟的同志,能给予指正。

Android初识:

用户界面设计

应用activity的默认布局定义了两个组件(widget): RelativeLayout和TextView。Android SDK内置了多种组件,通过配置各种组件可获得所需的用户界面及行为。每一个组

件都是View类或其子类(如TextView或Button)的一个具体实例。

 

视图层级结构

组件包含在视图对象的层级结构中,这种结构称作视图层级结构(view hierarchy)



LinearLayout组件继承自View子类的ViewGroup组件。 ViewGroup组件是个包含并配置其

他组件的特殊组件。

其他ViewGroup子类还包括FrameLayout、 TableLayout和RelativeLayout

 

组件属性

1.    android:layout_width和android:layout_height属性

2.    android:orientation属性

3.    android:text属性

 

创建字符串资源

每个项目均有strings.xml的默认字符串文件

 

 

 

 

从布局XML 到视图对象

activity子类的实例创建后, onCreate(Bundle)方法会被调用。 activity创建后,它需要获取

并管理属于自己的用户界面。获取activity的用户界面,可调用以下Activity方法:

public void setContentView(intlayoutResID)

根据传入的布局资源ID参数,该方法生成指定布局的视图并将其放置在屏幕上。布局视图生

成后,布局文件包含的组件也随之以各自的属性定义完成实例化。

 

资源与资源ID

布局是一种资源。 资源是应用非代码形式的内容

 

修改资源后,资源文件不会实时刷新。 Android Studio另外还存有一份代码编译用的R.java隐

藏文件。当前编辑区打开的R.java文件仅在应用安装至设备或模拟器前产生,因此只有在Android

Studio中点击运行应用时,它才会得到更新。

Android为整个布局文件以及各个字符串生成资源ID,但activity_quiz.xml布局文件中的组件

除外,因为不是所有的组件都需要资源ID。

 

组件的实际应用

编码使用按钮组件,这需要以下两个步骤:

1、引用生成的视图对象

2、为对象设置监听器,以响应用户操作。

 

 

引用组件

通过以下Activity方法引用已生成的组件:

public View findViewById(intid)

方法以组件的资源ID作为参数,返回一个视图对象。

 

设置监听器

Android应用属于典型的事件驱动类型,事件驱动型应用启动后,即开始等待行为事件的发生。

为响应某个事件而创建的对象叫作监听器(listener)。 监听器是实现特定监听器接口的对象,用来监听某类事件的发生

例. 为TRUE按钮设置监听器  (使用匿名内部类)

mTrueButton.setOnClickListener(newView.OnClickListener() {

@Override

public void onClick(View v) {

// Does nothing yet, but soon!

}

});

 

创建提示消息

调用来自Toast类的以下方法,可创建一个toast:

public static ToastmakeText(Context context, int resId, int duration)

 

该方法的Context参数通常是Activity的一个实例(Activity本身就是Context的子类)

创建toast后,可调用Toast.show()方法在屏幕上显示toast消息

 

Eg.

mTrueButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

Toast.makeText(QuizActivity.this,

R.string.incorrect_toast,

Toast.LENGTH_SHORT).show();

// Does nothing yet, but soon!

}

});

 

Android 编译过程

 


 

应用的activity_quiz.xml布局文件的内容该如何转变为View对象呢?

作为编译过程的一部分, aapt(Android Asset Packaging Tool)将布局文件资源编译压缩紧凑后,打包到.apk文件

中。然后,在QuizActivity类的onCreate(...)方法调用setContentView(...)方法时,

QuizActivity使用LayoutInflater类实例化布局文件中定义的每一个View对象

 


 

 

生成获取方法与设置方法

如果我们需要对新增的两个变量需要获取方法与设置方法。为避免手工输入,可设置由Android Studio自动生成。

 

1、首先,配置Android Studio识别成员变量的m前缀。

2、回到Question.java中,右击构造方法后方区域,选择Generate... → Getter And Setter菜单项。

选择mTextResId和mAnswerTrue,为每个变量都生成获取方法与设置方法

 

 

 

Android 与 MVC 设计模式

应用对象按模型、控制器和视图的类别分为三部分。 Android应用基于模型-

控制器-视图(Model-View-Controller, MVC)的架构模式进行设计。

1、模型对象存储着应用的数据和业务逻辑。模型类通常用来映射与应用相关的一些事物,如

用户、商店里的商品、服务器上的图片或者一段电视节目;模型对象不关心用户界面,它存在的唯一目的就是存储和管理应用数据。

2、 视图对象知道如何在屏幕上绘制自己以及如何响应用户的输入,如用户的触摸等。一个

简单的经验法则是,凡是能够在屏幕上看见的对象,就是视图对象。

3、 控制对象含有应用的逻辑单元,是视图与模型对象的联系纽带。控制对象响应视图对象

触发的各类事件,此外还管理着模型对象与视图间的数据流动。



 

 

在 XML文件中引用资源

通过资源类型和资源名称,可引用其他资源。以@string/开头的定义

是引用字符串资源。以@drawable/开头的定义是引用drawable资源

Activity的生命周期(处理旋转问题时)

activity在运行、暂停和停止三种可能的状态间进行转换。每次状态发生转换时,都有对应的Activity方法将状态改变的消息通知给activity。



 

完整的生命周期:



 

两者的区别就是完整的生命周期加入了 暂存状态。因为在日常使用中,不仅仅处理设备旋转问题,还有用户用户离开当前activity管理的用户界面,或Android需要回收内存时, activity也会被销毁。基于用户体验考虑, Android从不会为了回收内存,而去销毁正在运行的activity。 activity在暂停或停止状态下才可能会被销毁。此时,会调用onSaveInstanceState(...)方法来存储数据,也就是暂存状态。

 

 

activity通过覆盖onCreate(...)方法来准备以下用户界面相关的工作:

1、实例化组件并将组件放置在屏幕上(调用setContentView(int)方法) ;

2、引用已实例化的组件;

3、为组件设置监听器以处理用户交互;

4、访问外部模型数据。

 

 

 

设备旋转与Activity 生命周期

设备旋转时,系统会销毁当前QuizActivity实例,然后创建一个新的QuizActivity实例。

 

Actitity销毁的两种情况

用户离开当前activity管理的用户界面,或Android需要回收内存时, activity也会被销毁

 

设备配置与备选资源

旋转设备会改变设备配置        设备配置是用来描述设备当前状态的一系列特征。这些特征包括:屏幕的方向、屏幕的密度、屏幕的尺寸、键盘类型、底座模式以及语言,等等。

 

Android可自动完成最佳匹配资源的调用,但前提是它必须通过新建一个activity来实现。

QuizActivity要显示一个新布局,需再次调用setContentView(R.layout.activity_quiz)

方法。而调用setContentView(R.layout.activity_quiz)方法又必须先调用QuizActivity.

onCreate(...)方法。因此,设备一经旋转, Android需要销毁当前的QuizActivity,然后新建

一个QuizActivity来完成QuizActivity.onCreate(...)方法的调用,从而实现使用最佳资源

匹配新的设备配置。

 

注意:在应用运行中,只要设备配置发生了改变, Android就会销毁当前activity,然后再

创建新的activity。

 

 

设备旋转前保存数据

在设备运行中发生配置变更时,如设备旋转,需采用某种方式保存以前的数据。覆盖以下

Activity方法就是一种实现方式:

protected void onSaveInstanceState(Bundle outState)

关键:该方法通常在onPause()、 onStop()以及onDestroy()方法之前由系统调用

 

该方法默认实现要求所有activity视图将自身状态数据保存在Bundle对象中。 Bundle是存储字符串键与限定类型值之间映射关系(键值对)的一种结构。

 

局限:在Bundle中存储和恢复的数据类型只能是基本数据类型(primitivetype)以及可以实

现Serializable或Parcelable接口的对象。在Bundle中保存定制类对象不是个好主意,因为

你取回的对象可能已经过时了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息