[转]android学习总结----Activity view

什么是Activity?

  • Activity 是用户接口程序,原则上它会提供给用户一个交互式的接口功能。
  • 它是 android 应用程序的基本功能单元。
  • Activity 本身是没有界面的

什么是view/ viewGroups?

  • view/ viewGroups :表示在 android 平台上的基本用户界面单元。
  • view :为指定的屏幕矩形区域存储布局和内容。处理尺寸和布局,绘制,焦点改变,翻屏,按键 等…
  • viewGroups:包含并管理下级系列的views 和 下级的 viewGroup

Activity 生命周期和信息传递

Activity的生命周期:

Activity 状态

  • 当一个 Activity 在屏幕的最上层的时候(堆栈的最顶端),它就是 active 或 running状态
  • 如果一个 Activity 失去焦点(focus)但是还看得到它的画面(比如:一个新的Activity 并不是全屏 或者是半透明的状态),那失去焦点的这个 Activity 则是处于 pause 的状态,它依然是活的(“活的”意思就是说它本身的状态和数据都是存在的,也跟窗口管理程序保持联系着)。像这种 pause 的 Activity 只有一种情况会消失,就是当系统的内存不足时,系统会自动判断,把不重要的 Activity 清除。
  • 如果一个Activity 被其他的 Activity 完全的遮盖住,他仍然保有全部的状态及数据,但因为它已不再被使用者看见,所以他的画面是被隐藏起来的(画面不需要进行更新),当系统内存不足时,这种stop 状态的 Activity 是最先被考虑拿下来释放内存的。
  • 当一个 Activity 处于 pause 或 stop 的状态时,系统可以要求 Activity 结束(finish)或直接移除(kill)它。当它需要再度呈现在使用者面前时,他必须要能完整的重新启动及恢复先前的状态。

Activity 状态转换图

Activity 信息传递

(我觉得 android 的信息传递跟 WM 中的 message 很像。)

说到 Activity 信息传递,关键就是以下两个类:

  • Intent

android 用了一个很特别的类 Intent 来使得从一个画面跳转到另一个画面,Intent 是用来描述一个程序想要做些什么事。

我们都知道Android有四大核心组件 Activity、Service、Broadcast Receiver和Content Provider,略去Content Provider不提,那么剩下的三个组件之间的通信考什么?这就是Intent!!它不仅可以在同一个应用中起传递信息的作用,还是可以在不同的应用进行传递信息。(信息传递方式与方法 详见:Intent 和 Intent Filter 介绍

Intent 数据结构中主要分为两个部分:一个是动作(例如 VIEW EDIT PICK...),一个是对数据产生的反应(数据是以URI的形式传递的)。

  • Intent Filter

当 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 都是在这个文件夹下声明的。

详见:AndroidManifest.xml文件解析

例子程序:

view/ viewGroups 界面布局:

android的界面布局在资源文件中就可以做到,当然也可用程序实现(这两种方法我们在下面都会介绍到)。但是最好还是在资源文件中做,然后用java实现逻辑,这样做就可以实现界面展现与逻辑的独立管理。

布局参数(LayoutParams)

每一个 ViewGroup 类使用一个继承于 ViewGroup.LayoutParams 的嵌套类,LayoutParams 包含定义了子节点 view 的尺寸和位置的属性类型。

几个常用的布局对象

FrameLayout

  • 最简单的布局对象
  • 在屏幕上故意保留的空白空间,你可以之后填充一个单独的对象
  • 所有的子元素都钉到屏幕的左上角
  • 不能为子元素指定位置

LinearLayout

  • 在一个方向上(垂直或水平)对齐所有的子元素。所有子元素一个跟一个的堆放。
  • 一个垂直列表每行将只有一个子元素(无论它们有多宽)
  • 一个水平列表 只是一列的高度(用最高的元素的高度来填充)
  • main.xml 代码样例

<?xml version="1.0" encoding="utf-8"?>

<!-- 布局对象为LinearLayout -->
<LinearLayout  
      <!-- 声明命名空间 –>
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="vertical"  <!-- 垂直分布 –>
      android:layout_width="fill_parent" <!-- 该布局对象宽为屏宽 –>
      android:layout_height="fill_parent" <!-- 该布局对象高为屏高 –> >

<!-- 子元素 TextView -->
    <TextView

android: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

  • 使子元素能够指明确切的 X/Y 坐标显示在屏幕上
  • (0,0) 点是屏幕的左上角
  • 允许元素重叠(不推荐)
  • 一般不建议使用这种布局对象,因为在绝对了

RelativeLayout

  • 让子元素指定它们相对于其他元素的位置(通过 ID 来指定)或是相对于父布局对象

资源文件目录

我们来看一下资源目录的结构和功能(项目名称为 ActivityTest ):

如上图所示:

  • bin 目录:里面存放的是编译完成后的 class 文件和 .apk 安装文件
  • gen 目录:该目录的最底层是一个 R.java 文件(这个文件很重要,在程序中靠它来调用资源)
  • res 目录:资源文件夹

drawable :放置资源图片

layout :放置界面布局的 xml 文件

values :放置界面布局中用到的 string color id 等…

  • src 目录:java代码目录

资源文件的具体使用方法,详见: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);

}

}

时间: 2024-11-04 03:48:43

[转]android学习总结----Activity view的相关文章

[转]android学习----基础UI编程(一)

1 通过 DisplayMetrics 类获取屏幕宽高 示例代码: package zyp.Activity; import android.app.Activity;import android.os.Bundle;import android.widget.*;import android.util.*; public class Test extends Activity {    //Called when the activity is first created. private T

[转]android学习----基础UI编程(四)

CheckBox 的使用 RadioButton 的使用 12. CheckBox 的使用 1)通过只含有一个CheckBox的实例来学习CheckBox的使用 示例代码 ① 创建新工程② 在string.xml 中添加字符串 <?xml version="1.0" encoding="utf-8"?><resources><string name="app_name">Ex_Ctrl_4</string

[转]android学习----基础UI编程(六)

相簿浏览 Gallery 文件搜索引擎FileSearch 17. Gallery 与 衍生BaseAdapter 容器 Gallery控件,即Android的图片库控件. 需要定义一个BaseAdaper的子类(eg.ImageAdapter)来操作控制图片资源,然后在主类中通过Gallery.setAdapter(new ImageAdapter(this));来使用这个控制类. 示例代码 本例中 ImageView 和 Gallery 控件相互协作 . ① 新建项目 ② 定义layout

[转]android学习----基础UI编程(二)

7. TextView 和 EditView 共舞 预达到效果:在EditText中输入同时TextView进行输出 //前提:在main.xml中添加EditText 和 TextView控件 核心代码示例: public class EX_Ctrl_1 extends Activity {    private TextView mTextView01;    private EditText mEditText01;    // Called when the activity is fi

[转]android学习----基础UI编程(七)

自动完成输入框 AutoCompleteTextView 多内容自动完成输入框 19. AutoCompleteTextView 自动完成输入框 智能输入框 AutoCompleteTextView 1. 简介 一个可编辑的文本视图显示自动完成建议当用户键入.建议列表显示在一个下拉菜单,用户可以从中选择一项,以完成输入.建议列表是从一个数据适配器获取的数据. 2. 重要方法 clearListSelection():清除选中的列表项 dismissDropDown():如果存在关闭下拉菜单 ge

[转]android学习----基础UI编程(八)

模拟/数字/线程小时钟设计 动态输入日期与时间 日期设置/时间设置对话框 21. 模拟/数字/线程小时钟设计 AnalogClock 与DigitalClock 的原理,以及线程时钟的实现 . 示例代码 ① 新建工程② 修改man.xml 布局,添加一个AnalogClock.一个DigitalClock.一个TextView<TextView  //这个TextView 用来显示线程时钟    android:id="@+id/TextView_showTime"    and

[转]android学习----消息机制

一. 角色描述 1. Looper : 一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列). 2. Handler : 你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里:或者接收Looper(从Message Queue取出)所送来的消息. 3. Message Queue(消息队列) : 用来存放线程放入的消息. 4. 线程 :UI thread通常就是main thread,而Android启动程

[转]android学习----基础UI编程(五)

相框设计 :ImageView 的堆叠作用 相框设计 :ImageButton 的堆叠作用 自定义下拉菜单 :Spinner 与setDropDownViewResource 动态添加╱删除的Spinner 菜单 : ArrayList 与Widget 的依赖性 14. 专业相框设计 1)ImageView 的堆叠应用 利用 ImageView 的堆叠,将上例中的实现不同相框的更换 示例代码 ① 新建工程② 准备三张png 图片 ③ 修改main.xml 布局,添加UI 元素 <?xml ver

[转]android学习----基础UI编程(三)

9. Toast--Android 专属浮动小提示 下例中,实现在一个EditView中输入一段话后,点击Button,Toast显示这段话. 示例代码: ① 新建工程② 在string.xml 中添加字符串 <?xml version="1.0" encoding="utf-8"?>    <resources>        <string name="app_name">EX_Ctrl_3</str