Android学习笔记(3):Hello Activity

前言

Android有四大组件:Activity,Service,Content Provider,Broadcast Receivers。我们从Activity开始逐个学习。

本文要点:

1.Activity是什么

2.如何创建Activity

3.Start another Activity

一、Activity是什么

Activity——它是一个可以同用户交互的应用程序组件。Android程序中的每个Activity都提供了一个单独的界面,它相当于Winform程序的Form。

An Activity is an application component that provides a screen with which users can interact in order to do something, such as dial the phone, take a photo, send an email, or view a map. Each activity is given a window in which to draw its user interface.

二、创建Activity

  像Form一样,Activity是一个基类,我们创建的具体的Activity都是继承自该类。创建Activity之前,我们先创建一个Android Project——HelloActivity,创建过程中,会创建一个程序默认启动的Activity,Name我们设置为MainActivity。

  在现有Project中创建Activity,可以按照:File -> New -> Other -> 选择Android/Android Activity -> 点击Next,设置Activity模板 -> 点击Next,设置Acitivity Name,Layout,Parent等信息 -> 点击Finish 完成Activity的创建。按此方式,我们在程序中创建一个名为DisplayMessageActivity,指定parent为MainActivity。

那么如何指定Android App 默认启动的Activity呢?这就得了解文件AndroidManifest.xml:

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

 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"

 3     package="com.wzhang.helloactivity"

 4     android:versionCode="1"

 5     android:versionName="1.0" >

 6 

 7     <uses-sdk

 8         android:minSdkVersion="6"

 9         android:targetSdkVersion="7" />

10 

11     <application

12         android:allowBackup="true"

13         android:icon="@drawable/ic_launcher"

14         android:label="@string/app_name"

15         android:theme="@style/AppTheme" >

16         <activity

17             android:name="com.wzhang.helloactivity.MainActivity"

18             android:label="@string/app_name" >

19             <intent-filter>

20                 <action android:name="android.intent.action.MAIN" />

21 

22                 <category android:name="android.intent.category.LAUNCHER" />

23             </intent-filter>

24         </activity>

25         <activity

26             android:name="com.wzhang.helloactivity.DisplayMessageActivity"

27             android:label="@string/title_activity_display_message" >

28             <meta-data

29                 android:name="android.support.PARENT_ACTIVITY"

30                 android:value="com.wzhang.helloactivity.MainActivity" />

31         </activity>

32     </application>

33 

34 </manifest>

从上面的配置文件中,我们可以清楚的看到我们创建的两个Activity.当我们需要设置某个Acitivity为默认启动Activity时,该Activity的必须配置包含以下信息:

<intent-filter>

      <action android:name="android.intent.action.MAIN" />



      <category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

观察AndroidManifest.xml中第二个Activity,我们还能发现,Parent信息是在<meta-data />节点中指定的。

三、Start Another Activity

  一个Android 程序一般是由多个Activity组成,本节通过一个小列子介绍下如何完成不同的Activity的跳转和切换。

  在一个Activity中打开另一个Activity,会使用到Android的另一个组件:Intent。这里以从MainActivity跳转到DispalyMessageActivity为例:

1.修改Layout/main.xml文件,我们增加一个输入框和一个按钮,给按钮添加一个onclick事件sendMessage. main.xml完整代码如下:

View Code
 1 package com.wzhang.helloactivity;

 2 

 3 import android.os.Bundle;

 4 import android.app.Activity;

 5 import android.content.Intent;

 6 import android.view.Menu;

 7 import android.view.View;

 8 import android.widget.EditText;

 9 

10 public class MainActivity extends Activity {

11 

12     public static final String EXTRA_MESSAGE = "com.wzhang.MainActivity.MESSAGE";

13 

14 

15     @Override

16     protected void onCreate(Bundle savedInstanceState) {

17         super.onCreate(savedInstanceState);

18         setContentView(R.layout.main);

19     }

20 

21     @Override

22     public boolean onCreateOptionsMenu(Menu menu) {

23         // Inflate the menu; this adds items to the action bar if it is present.

24         getMenuInflater().inflate(R.menu.main, menu);

25         return true;

26     }

27     

28 

29     public void sendMessage(View view){

30         Intent intent = new Intent(this, DisplayMessageActivity.class);

31         EditText editText = (EditText) findViewById(R.id.txtMsg);

32         String message = editText.getText().toString();

33         intent.putExtra(EXTRA_MESSAGE, message);

34         startActivity(intent);

35     }

36 

37 }

2.在MainActivity.java中实现sendMessage,用来打开DisplayMessageActivity界面。具体如下:

a.创建Intent对象。

Intent intent = new Intent(this, DisplayMessageActivity.class);

第一个参数指定上下文环境,第二个参数指定目标对象。Activity是Context的子类,直接指定为DisplayMessageActivity。

注:到这里我们如果直接调用startActivity(intent):已经可以打开一个Activity了。但是很多情况下,我们打开一个Activity是需要传递信息的,所以我们继续。

b.调用intent.putExtra(name,value),将文本框中输入的信息,封装到Intent对象中;

EditText editText = (EditText) findViewById(R.id.txtMsg);

String message = editText.getText().toString();

intent.putExtra(EXTRA_MESSAGE, message);

其中,变量EXTRA_MESSAGE,定义如下:

public static final String EXTRA_MESSAGE = "com.wzhang.helloactivity.MESSAGE";

putExtra参数说明:

Name,String类型。定义消息的Name,在被调用对象中需要通过这个Name来获取所需要的消息。

Value,String类型。需要传递的信息。

c.调用startActivity(intent),来打开DisplayMessageAcyivity.

MainActivity.java的完整代码:

View Code
 1 package com.wzhang.helloactivity;

 2 

 3 import android.os.Bundle;

 4 import android.app.Activity;

 5 import android.content.Intent;

 6 import android.view.Menu;

 7 import android.view.View;

 8 import android.widget.EditText;

 9 

10 public class MainActivity extends Activity {

11 

12     public static final String EXTRA_MESSAGE = "com.wzhang.MainActivity.MESSAGE";

13 

14 

15     @Override

16     protected void onCreate(Bundle savedInstanceState) {

17         super.onCreate(savedInstanceState);

18         setContentView(R.layout.main);

19     }

20 

21     @Override

22     public boolean onCreateOptionsMenu(Menu menu) {

23         // Inflate the menu; this adds items to the action bar if it is present.

24         getMenuInflater().inflate(R.menu.main, menu);

25         return true;

26     }

27     

28 

29     public void sendMessage(View view){

30         Intent intent = new Intent(this, DisplayMessageActivity.class);

31         EditText editText = (EditText) findViewById(R.id.txtMsg);

32         String message = editText.getText().toString();

33         intent.putExtra(EXTRA_MESSAGE, message);

34         startActivity(intent);

35     }

36 

37 }

3.在DisplayMessageActivity中获取Intent对象,并显示MainActivity传过来的Message;

Intent intent = getIntent();

String message = intent.getStringExtra(HelloActivity.EXTRA_MESSAGE);

DisplayMessageActivity完整代码:

View Code
 1 package com.wzhang.helloactivity;

 2 

 3 import android.os.Bundle;

 4 import android.app.Activity;

 5 import android.content.Intent;

 6 import android.view.Menu;

 7 import android.view.MenuItem;

 8 import android.widget.TextView;

 9 

10 public class DisplayMessageActivity extends Activity {

11 

12     @Override

13     protected void onCreate(Bundle savedInstanceState) {

14         super.onCreate(savedInstanceState);

15 

16         Intent intent = getIntent();

17         String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

18         // Create the text view

19         TextView textView = new TextView(this);

20         textView.setTextSize(40);

21         textView.setText(message);

22         

23         setContentView(textView);        

24     }

25 

26     @Override

27     public boolean onCreateOptionsMenu(Menu menu) {

28         getMenuInflater().inflate(R.menu.display_message, menu);

29         return true;

30     }

31 

32     @Override

33     public boolean onOptionsItemSelected(MenuItem item) {

34         return super.onOptionsItemSelected(item);

35     }

36 

37 }

完成以上几步之后,运行示例程序。运行效果:

image

输入Hello Activity,点击send得到:

image

示例代码:HelloActivity.rar(运行环境Android2.1)

本文简单的介绍了Activity,接下来需要认识Activity的生命周期。

你可能感兴趣的:(Android学习)