• 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的生命周期。

  • 相关阅读:
    【代码笔记】iOS-GCD用法
    【代码笔记】iOS-DropDownDemo-下拉按钮效果
    【代码笔记】iOS-cell自动变化大小
    【代码笔记】iOS-cell折叠
    【代码笔记】iOS-archive保存图片到本地
    【代码笔记】iOS-左右可滑动的选择条
    【代码笔记】iOS-自动成表格的效果
    【代码笔记】iOS-自定义选择框
    【代码笔记】iOS-实现网络图片的异步加载和缓存
    【代码笔记】iOS-自定义开关
  • 原文地址:https://www.cnblogs.com/pszw/p/2804055.html
Copyright © 2020-2023  润新知