什么是Activity?
什么是view/ viewGroups?
Activity 生命周期和信息传递
Activity的生命周期:
Activity 状态
Activity 状态转换图
Activity 信息传递:
(我觉得 android 的信息传递跟 WM 中的 message 很像。)
说到 Activity 信息传递,关键就是以下两个类:
android 用了一个很特别的类 Intent 来使得从一个画面跳转到另一个画面,Intent 是用来描述一个程序想要做些什么事。
我们都知道Android有四大核心组件 Activity、Service、Broadcast Receiver和Content Provider,略去Content Provider不提,那么剩下的三个组件之间的通信考什么?这就是Intent!!它不仅可以在同一个应用中起传递信息的作用,还是可以在不同的应用进行传递信息。(信息传递方式与方法 详见:Intent 和 Intent Filter 介绍)
Intent 数据结构中主要分为两个部分:一个是动作(例如 VIEW EDIT PICK...),一个是对数据产生的反应(数据是以URI的形式传递的)。
当 Intent 要求做某件事的时候,Intent Filter 被用来描述这个 Activity 能够做些什么(就是说 Intent 是发送方,而 Intent Filter 是接收方的)。
比如,一个 Activity 要能够显示个人联络数据,就是必须在 Intent Filter 说明你要如何处理个人联络数据,并用 ACTION_VIEW 呈现出来。
Intent可以分为两类,一类是显式的Intent,一类是隐式的Intent。显示的Intent就是指定了组件名字的,隐式的就是没有指定Intent的组件名字,需要Android根据Intent中的Action、data、Category等来解析匹配。而目标组件(Activity、Service、Broadcast Receiver)怎通过设置他们的Intent Filter来界定其处理的Intent。如果一个组件没有定义Intent Filter,那么它只能接受处理显示的Intent,只有定义了Intent Filter的组件才能同时处理隐式和显示的Intent。(详见:Intent 和 Intent Filter 介绍)
说到 Intent Filter 就必须说一下 AndroidManifest.xml 文件,因为 Intent Filter 都是在这个文件夹下声明的。
例子程序:
view/ viewGroups 界面布局:
android的界面布局在资源文件中就可以做到,当然也可用程序实现(这两种方法我们在下面都会介绍到)。但是最好还是在资源文件中做,然后用java实现逻辑,这样做就可以实现界面展现与逻辑的独立管理。
布局参数(LayoutParams)
每一个 ViewGroup 类使用一个继承于 ViewGroup.LayoutParams 的嵌套类,LayoutParams 包含定义了子节点 view 的尺寸和位置的属性类型。
几个常用的布局对象
FrameLayout
LinearLayout
<?xml version="1.0" encoding="utf-8"?>
<!-- 布局对象为LinearLayout -->
<!-- 子元素 TextView -->
<LinearLayout
<!-- 声明命名空间 –>
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" <!-- 垂直分布 –>
android:layout_width="fill_parent" <!-- 该布局对象宽为屏宽 –>
android:layout_height="fill_parent" <!-- 该布局对象高为屏高 –> >
<TextViewandroid:layout_width="fill_parent" <!-- 子元素宽为屏宽 –>
android:layout_height="wrap_content" <!-- 子元素高为自身高度 –>
<!-- 显示的文本 类型为string 内容在value文件夹下名字为hello的对象 –>
android:text="@string/hello"
<!-- 子元素ID值在java文件中调用时可以用;—>
<!--"+" 会使R.java下自动生成类型为id的名为test_1对象 –>
android:id="@+id/test_1"
android:
android:textColor="#00ff00"
android:textStyle="bold"
/>
<TextView
android:id="@+id/test_2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
android:textColor="#ff0000"
android:
android:textStyle="italic">
</TextView>
</LinearLayout>
效果图:
TableLayout
AbsoluteLayout
RelativeLayout
资源文件目录
我们来看一下资源目录的结构和功能(项目名称为 ActivityTest ):
如上图所示:
drawable :放置资源图片
layout :放置界面布局的 xml 文件
values :放置界面布局中用到的 string color id 等…
资源文件的具体使用方法,详见:android工程资源访问
在java程序中进行布局设置
程序样例:
package zyp.Activity;
//导入要使用的包
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.TextView;
import class Test extends Activity {
//定义使用的对象
private LinearLayout myLayout;
private LinearLayout.LayoutPatams layoutP;
private int WC = LinearLayout.LayoutPatams.WRAP_CONTENT;
private TextView black_TV;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//实例化一个LinearLayout 布局对象
myLayout= new LinearLayout(this);
//设置LinearLayout的布局为垂直布局
myLayout.setOrientation(LinearLayout.VERTICAL);
//加载到主屏幕
setContentView(myLayout);
//实例化一个LinearLayout 布局参数,用来添加View
layoutP = new LinearLayout.layoutParams(WC ,WC );
//实例化一个TextView对象
black_TV = new TextView(this);
//把TextView添加到LinearLayout布局中
myLayout.addView(black_TV, layoutP);
//设置文本颜色和文本内容
black_TV.setText(“黑色”);
black_TV.setTextColor(Color.BLACK);
}
}