- 浏览: 188652 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
netwelfare:
这篇文章关于jsessionid讲解的不错。关于jsessio ...
关于JSessionID【转】 -
ITcms:
Activity直接执行了onCreate方法的那部分,我觉得 ...
Android之Activity学习 -
tinygroup:
Sorry发错了。
蛇形矩阵的java实现 -
tinygroup:
public static int[][] spira ...
蛇形矩阵的java实现 -
laitao:
[*]引用pulic djs
Servlet的生命周期
appears as a floating view over the application. It will never receive focus.Activity学习:
一、Activity认识
Activity是用户与Android应用程序交互的接口,用户操作应用程序都是通过Activity完成的,这只是一种抽象的定义方式。在Activity中可以放置各种控件,如TextView,Button等,又可以把它看作是一个控件容器。
二、创建Activity以及运行Activity的步骤
1、一个Activity其实就是一个类,这个类继承于Activity。
2、需要覆盖onCreate(Bundle savedInstanceState)方法,该方法在Activity第一次运行时,Activity框架会调用这个方法。
3、由于Activity是Android应用程序的一个组件,所以每一个Activity都需要在android的配置文件AndroidManifest.xml中进行配置。
4、为Activity添加必要的控件,如何添加呢?在layout文件夹中创建一个声明一个xml格式的布局文件,然后再在这个布局文件中对Activity的布局以及不同的控件进行设置。
5、再在第一步定义的Activity子类中通过findViewById(R中对应的id类中控件的id)方法来获取布局文件中声明的控件,前提是布局文件中必须声明这些控件的id.
三、多个Activity之间的关系
Activity之间可以传递数据,而且Activity不仅仅必须在同一个应用程序内,也可以在不同的应用程序之间。使用startActivity(Intent intent)来执行另外一个Activity,其中intent是很关键的,它象征了请求,其中包含了请求执行的动作,携带的数据等等信息。
四、Intent的作用
可以把Activity理解为一个请求,其中包含了以下一组信息:
Component name: 请求的组件的名称
Action: 组件拿到intent后执行的动作
Data: Activity之间或者是和别的应用程序之间传递的数据
Category
Extras: 一些额外的信息,它们都是键值对
Flags
Intent的setClass(page1.this, page2.class);其中第一个参数是启动Intent的Activity,第二个参数是被启动的Activity。
onClickListener 点击行为监听器,和Swing中的监听器类似,可以作为Activity的内部类或者是匿名类定义,复写其中的onCreate()方法。
public class Activity02 extends Activity { /** Called when the activity is first created. */ //代表按钮对象的引用 private Button myButton = null; //复写父类当中的onCreate方法,Activity第一次运行时会调用这个方法 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //为Activity设置布局管理文件 setContentView(R.layout.main); //以下两行代码是根据控件的ID来得到控件对象 myButton = (Button)findViewById(R.id.myButton); //为按钮对象设置监听器对象 myButton.setOnClickListener(new MyButtonListener()); } //以下是一个内部类,这个内部类的对象是一个监听器(如果大家对监听器不是很熟悉,可以参考设计模式当中的观察者模式) class MyButtonListener implements OnClickListener{ //生成该类的对象,并将其注册到控件上。如果该控件被用户按下,就会执行onClick方法 @Override public void onClick(View v) { //生成一个Intent对象 Intent intent = new Intent(); //在Intent对象当中添加一个键值对 intent.putExtra("testIntent", "123"); //设置Intent对象要启动的Activity intent.setClass(Activity02.this, OtherActivity.class); //通过Intent对象启动另外一个Activity Activity02.this.startActivity(intent); /**以下的4行代码将启动发送短信的Activity,详细的情况会在以后的课程当中进行介绍 Uri uri = Uri.parse("smsto://0800000123"); Intent intent = new Intent(Intent.ACTION_SENDTO, uri); intent.putExtra("sms_body", "The SMS text"); startActivity(intent); */ } } }
五、在一个Activity中启动另外一个Activity的方法
利用startActivity(Intent intent)方法启动另外一个Activity
六、使用Intent在Activity之间传递数据的基本方法
使用Intent的putExtra("key", "value")方法来传递,在对应的Activity中利用getStringExtra("key")来取得值,当然首先要getIntent()得到从另外一个Activity中传递过来的Intent对象。
七、常见的Activity控件
1、EditText:类似于html中的文本输入框,用户在其中输入文本
2、TextView:显示文本的控件
3、Button:按钮
4、Menu:菜单控件
前面三个都需要在Activity对应的布局文件中进行注册,而Menu控件不需要在布局文件中进行注册。
public boolean onCreateOptionsMenu(Menu menu) 当用户点击MENU按钮的时候会调用该方法,因此如果想实现点击MENU按钮弹出一个菜单就需要复写该方法。
通过调用add(int groupId, int itemId, int order, int titleRes)
来添加菜单项,该方法返回的结果是MenuItem,注意该方法的四个参数,第一个是组id,第二个是菜单项id,第三个是顺序id,最后一个是菜单项的值,这个值应该定义在string.xml中,方便实现国际化。
那么当用户选择了某个菜单项的时候又怎么办呢?
复写public boolean onOptionsItemSelected(MenuItem item)方法,在方法中利用getItemId()方法来判断用户点击的MenuItem(利用ItemId)是哪个,并执行相应的操作。
结束程序执行时,调用Activity的finish()就可以了。
5、RadioGroup和RadioButton
顾名思义,RadioButton即单选按钮,多个RadioButton是属于同一个RadioGroup的,因此在布局文件中,RadioButton标签是作为RadioGroup的子元素存在的。RadioGroup也可以配置orientation,即其中的radioButton的排列方式。
在Activity中,如果需要对RadioGroup和RadioButton添加监听器,需要对RadioGroup对象添加监听器,通过调用:
genderGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() //匿名内部类
来为当前的RadioGroup添加监听器,监听后执行的操作需要继承RadioGroup的内部类OnCheckedChangeListener,并且复写public void onCheckedChanged(RadioGroup group, int checkedId)方法。调用RadioButton对象的getId()和checkedId来进行比较,判断点击的是哪个RadioButton。
6、CheckBox
和RadioButton不一样,checkBox表示复选框,它没有组的概念在里面,在为checkBox设置监听器的时候,需要为每个CheckBox都设置一个监听器,而不是像RadioButton那样,只为RadioGroup设置监听器。通过调用CheckBox对象的setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {来添加监听器。它是复写的CompoundButton的内部类OnCheckedChangeListener的public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)来实现的。CheckBox继承于compoundButton。其中isChecked顾名思义,表示是否选中,根据此值再来完成相应地操作。
7、Toast
A toast is a view containing a quick little message for the user.简单翻译Toast就是一个包含了提醒用户的信息的一个视图。appears as a floating view over the application. It will never receive focus.Toast视图是漂浮在别的Activity之上的,而且它永远不能获得焦点。
调用Toast的静态方法
public static Toast makeText(Context context, CharSequence text, int duration)
来添加一个Toast,该Toast展示的结果是text中的值,duration表示该Toast显示的时间。
8、ProgressBar
顾名思义,该控件指的是进度条控件, 进度条在布局文件中进行配置,其中通过设置ProgressBar的style属性来选择不同的进度条:
style="?android:attr/progressBarStyleHorizontal" 水平进度条
style="?android:attr/progressBarStyle" 普通进度条
通过设置visibility属性来设置进度条是否可见:
android:visibility="gone" //不可见,具体的可见性在Activity中进行设置
对于水平进度条,还可以在布局文件中设置进度条的max属性,指定进度条的基数:
android:max="100"
在Activity中可以调用进度条对象的setVisibility(View.VISIBLE)来设置进度条是否可见,也可以调用setMax()来设置水平进度条的基数。另外,还可以调用进度条的
setProgress(int progress) 来设置主进度条的位置,进度条的位置位于:progress/max(max是水平进度条的基数)
setSecondaryProgress(int secondaryProgress) 用来设置第二进度条的当前位置,原理同上面的方法。
9、ListView
八、Activity的生命周期
public class Activity extends ApplicationContext {
protected void onCreate(Bundle savedInstanceState);
protected void onStart();
protected void onRestart();
protected void onResume();
protected void onPause();
protected void onStop();
protected void onDestroy(); }
Activity中上面的七个方法代表了Activity生命周期的七个阶段,其中当Activity第一次被创建的时候会执行onCreate方法,而当Activity创建完后并且展示给用户的时候会调用onStart方法,接着如果该Activity获得焦点将会由Android系统调用该Activity的onResume方法,接下来,如果该Activity执行了另外一个Activity,那么上一个Activity的onPause方法会被调用以执行一些资源的释放操作,接下来执行新的Activity的onCreate,onStart以及onResume方法,如果新建的Activity完全覆盖了原来的Activity,那么原来Activity的stop方法将会被调用。而当从新建的Activity中会到原来的Activity时onRestart方法会被调用,并连续执行onStart()以及onResume(),此时不会再执行onCreate(),因为该Activity并未被销毁,如果在Activity中执行了finish()或者Android系统需要回收资源时可能会执行Activity的onDestroy()。
注意,在Activity的执行过程中,存在一个Task的概念,Task其实就是一个Activity栈,先进后出,其中首先执行的Activity入栈,接下来执行的Activity继续入栈,如果Activity执行了finish(),将不会被放入Task栈中,新的Activity入栈的时候,上一个Activity会执行onPause(),接下来是刚入栈的Activity的onCreate,onStart,onResume方法,接下来可能会执行上一个Activity的onStop方法,当从Task栈中弹出Activity的时候,会首先执行上一个弹出的Activity的onPause(),接着执行当前Activity的onRestart(),onStart()以及onResume(),再执行上一个弹出的Activity的onStop()以及onDestroy()。弹出的Activity若要再次被执行,即进入Task栈,需要再次执行onCreate来创建它,因为此时它已经被销毁,不能再onRestart了。
即从Task栈中弹出Activity时会执行将弹出的Activity给销毁掉。
android:theme="@android:style/Theme.Dialog" 设置当前Activity为弹出式的Activity,其中Task栈中前一个Activity并未被完全覆盖,因此此时只会调用前一个Activity的onpause()方法,而不会调用onStop方法。
<!--StartFragment -->
11-14 13:14:37.342: INFO/System.out(267): FirstActivity ---> onCreate 11-14 13:14:37.403: INFO/System.out(267): FirstAcvity --->onStart 11-14 13:14:37.413: INFO/System.out(267): FirstAcvity --->onResume 11-14 13:14:45.093: INFO/System.out(267): FirstAcvity --->onPause 11-14 13:14:45.132: INFO/System.out(267): SecondActivity--->onCreate 11-14 13:14:45.142: INFO/System.out(267): SecondActivity--->onStart 11-14 13:14:45.152: INFO/System.out(267): SecondActivity--->onResume 11-14 13:14:53.433: INFO/System.out(267): SecondActivity--->onPause 11-14 13:14:53.473: INFO/System.out(267): FirstAcvity --->onStop 11-14 13:14:53.473: INFO/System.out(267): FirstActivity ---> onCreate 11-14 13:14:53.493: INFO/System.out(267): FirstAcvity --->onStart 11-14 13:14:53.493: INFO/System.out(267): FirstAcvity --->onResume 11-14 13:14:53.833: INFO/System.out(267): SecondActivity--->onStop 11-14 13:17:02.293: INFO/System.out(267): FirstAcvity --->onPause 11-14 13:17:02.323: INFO/System.out(267): SecondActivity--->onCreate 11-14 13:17:02.342: INFO/System.out(267): SecondActivity--->onStart 11-14 13:17:02.352: INFO/System.out(267): SecondActivity--->onResume
<!--StartFragment -->
八、Activity的布局
(1)LinearLayout
android:orientation="vertical" ——可选horizontal 和 vertical 表示控件水平放置或者垂直放置,即横向布局和纵向布局
常见的控件属性
android:id —— 为控件指定相应的ID
android:text —— 指定控件当中显示的文字,需要注意的是,这里尽量使用strings.xml文件当中的字符串
android:grivity —— 指定控件中文字的基本位置,比如说居中,居右等位置
android:textSize —— 指定控件当中字体的大小
android:background —— 指定该控件所使用的背景色,RGB命名法
android:width —— 指定控件的宽度
android:height —— 指定控件的高度
android:padding* —— 指定控件的内边距,也就是说控件中的内容与控件边框之间的距离,可以不用指定left,right,top,bottom,直接指定padding表示四边边距。
android:margin* —— 指定控件的外边距,也就是控件边框之间的距离,可以不用指定left,right,top,bottom,直接指定margin表示四边边距。
android:layout_weight —— 控件之间的大小比例,当前控件所占的比例为:当前控件的weight/所有控件的weight之和
android:sigleLine —— 如果设置为真的话,则将当前控件的所有内容在同一行当中进行显示
(2)TableLayout
TableLayout标签本身的属性android:stretchColumns表示拉伸某一列来填满父控件的控件,例如对于TableRow来说,其中有很多控件,但是这些控件都无法让TableRow填满,此时设置了拉伸列,那么指定列将会被拉伸来填满TableRow。
TableLayout中可以包含很多的TableRow标签,TableRow标签中的每个控件占据一列,每个TableRow标签代表占据一行。
为了得到复杂的布局,各个Layout之间是可以相互嵌套的
(2)RelativeLayout 相对布局
常见控件的布局,分为四组:
android:layout_above 将该控件的底部至于给定ID的控件之上
android:layout_below 将该控件的顶部至于给定ID的控件之下
android:layout_toLeftOf 将该控件的右边缘和给定ID的控件的左边缘对齐
android:layout_toRightOf 将该控件的左边缘和给定ID的控件的右边缘对齐
android:layout_alignBaseline 该控件的baseline和给定ID的控件的baseline对齐
android:layout_alignBottom 将该控件的底部边缘与给定ID控件的底部边缘
android:layout_alignLeft 将该控件的左边缘与给定ID控件的左边缘对齐
android:layout_alignRight 将该控件的右边缘与给定ID控件的右边缘对齐
android:layout_alignTop 将给定控件的顶部边缘与给定ID控件的顶部对齐
android:alignParentBottom 如果该值为true,则将该控件的底部和父控件的底部对齐
android:layout_alignParentLeft 如果该值为true,则将该控件的左边与父控件的左边对齐
android:layout_alignParentRight 如果该值为true,则将该控件的右边与父控件的右边对齐
android:layout_alignParentTop 如果该值为true,则将空间的顶部与父控件的顶部对齐
android:layout_centerHorizontal 如果值为真,该控件将被至于水平方向的中央
android:layout_centerInParent 如果值为真,该控件将被至于父控件水平方向和垂直方向的中央
android:layout_centerVertical 如果值为真,该控件将被至于垂直方向的中央
未完待续。
感谢mars老师录制的教学视频:http://www.verycd.com/topics/2837883/
评论
发表评论
-
Android之SQLite学习
2010-11-18 15:43 1414SQLite介绍 SQLite是轻量级的、嵌入式的、关 ... -
活用Android的Message Queue(3)
2010-11-17 16:22 12863. 由主线程发送消息给子线程(续) 上述范例里, ... -
活用Android的Message Queue(2)
2010-11-17 15:44 11711. 复习Message Queue的角色 在上 ... -
活用Android的Message Queue(1)
2010-11-17 15:18 28441. Message Queue的角色 l ... -
android Handler 分析
2010-11-17 11:59 1796首先需要明白,handler发 ... -
Android的Handler总结
2010-11-16 21:38 1085一、Handler的定义: ... -
Android之Handler学习
2010-11-16 21:19 6998使用Handler的大致流程: 1、首先创建一个Handle ...
相关推荐
Android Activity学习笔记 Android Activity是Android系统中最基本的组件之一,它负责处理用户交互和显示用户界面。本文将深入讲解Activity的生命周期、Activity之间的数据交互、Activity启动模式、Task和BackStack...
在Android开发中,Activity是应用程序的基本构建块,它代表了用户可以与之交互的界面。...通过学习这个小例子,开发者可以对Android应用的核心组成部分Activity有更深入的理解,为后续的Android开发打下坚实的基础。
在Android应用开发中,Activity是核心组件之一,它代表了用户与应用交互的界面。"android-activity_学习资料"的压缩包很可能包含了关于Activity的深入学习材料,旨在帮助开发者理解并熟练掌握这一关键概念。Activity...
当我们谈论“Android学习之Activity弹窗”时,我们通常是指在Activity上显示的各种对话框或者浮层,例如AlertDialog、ProgressDialog、PopupWindow等。这些弹窗在应用中起到了提示信息、获取用户输入、展示选项等...
在Android开发中,Activity是应用程序的基本组件之一,用于呈现用户界面并与用户交互。然而,有时候开发者可能需要在不改变原始Activity的基础上实现不同的功能或者提供不同的入口,这时Android系统提供的Activity...
在Android应用开发中,Activity是构成应用程序的基本组件,它代表用户界面的一个屏幕。有时,我们需要在子Activity执行某些操作后将结果返回给父Activity。这个过程通常涉及到Intent的使用,Intent不仅用于启动新的...
本项目"android native activity"提供了创建和运行一个基本Native Activity的实例,适合对Android原生编程感兴趣的开发者学习。 首先,Native Activity是Android系统框架的一部分,由Android的libnative_activity....
在Android应用开发中,Activity是Android四大组件之一,它是用户界面的主要载体,承载着与用户交互的任务。深入学习Android Activity,对于理解Android应用的工作机制至关重要。以下是对Activity的详细解析,以及...
在Android开发中,Activity是应用程序的基本构建块,用于展示用户界面和处理用户交互。Activity跳转是Android应用中常见的操作,用于在不同的界面之间...继续深入学习Android框架,你将能更好地理解和运用这些概念。
本压缩包"Activityzhuanghuantexiao"包含了Android Activity的一些特效实现,这对于开发者来说是一个很好的学习资源,可以帮助他们提升应用的用户体验。 1. **动画效果**:Android Activity中的特效往往涉及到动画...
在Android应用开发中,Activity是核心组件之一,它代表了用户界面的一个屏幕或者一个交互窗口。这个"android Activity 详述 demo"旨在深入探讨Activity的工作原理及其在实际应用中的使用方式。通过链接给出的博客...
在Android开发中,Activity是应用程序的基本构建块,用于表示用户可见的屏幕。Activity之间的切换动画不仅可以提升用户体验,还可以为应用程序增添个性化特色。Android系统提供了一系列的API,允许开发者自定义这些...
在Android开发中,Activity是应用的基本构建块,它代表了用户界面的一个独立屏幕。Activity入门和跳转是每个Android开发者必须掌握的核心技能。本视频教程深入浅出地讲解...这将为你的Android开发之路打下坚实的基础。
在Android应用开发中,Activity是Android四大组件之一,它是用户界面的主要载体,负责与用户进行交互。本篇文章将深入探讨Activity的子类化及其在实际开发中的应用。通过子类化Activity,我们可以更好地组织代码,...
在Android开发中,Activity是应用的核心组件之一,它充当了用户界面的主要载体,负责与用户交互。本系列将深入探讨Android基础中的Activity相关知识,帮助开发者理解和掌握如何创建、管理和控制Activity。 首先,...
这篇博客"Android学习之路——4.Activity简介"很可能会详细解释Activity的基本概念、生命周期以及如何在实践中使用它。 Activity作为Android应用程序的一个窗口,它可以显示用户界面,并响应用户的交互。每个...
在Android应用开发中,Activity是用户界面的基本组件,它负责与用户进行交互。理解Activity的启动模式至关重要,因为这直接影响到应用的行为和流程控制。本Demo涵盖了Activity的三种主要启动模式:standard、...
- 学习使用`onActivityResult()`处理来自其他Activity的结果。 - 使用`finish()`方法可主动结束Activity。 了解并熟练掌握Activity的生命周期是Android开发的基础,通过示例项目“ActivityLifecycle”,开发者可以...
Android之Activity生命周期,适合新手学习,全面而详细的介绍了Activity的生命周期。
【Android的Activity学习笔记】 Activity在Android开发中扮演着至关重要的角色,它是应用程序的基本功能单元,主要用于构建用户界面和处理用户交互。Activity本身并不具备界面元素,而是通过`setContentView(View)`...