- Android开发与实战
- 赵书兰编著
- 1319字
- 2020-08-28 23:32:46
1.6 Android的活动
要了解一个活动所经历的各个阶段,最好的办法是创建一个新项目,实现各种事件,然后使活动经受各种用户交互的考验。
【例1-1】理解一个活动的生命周期。
【实现步骤】
(1)启动Eclipse,创建一个名为Activities的工程。
(2)在MainActivity.java文件中添加下列加框的语句:
(3)按F11键在Android模拟器上调试应用程序。
(4)当活动第一次被加载时,应该可以在LogCat窗口中看到以下内容(单击Debug透视图):
08-07 03:41:27.779: DEBUG/Events(378):In the onCreate() event 08-07 03:41:27.779: DEBUG/Events(378):In the onStart() event 08-07 03:41:27.779: DEBUG/Events(378):In the onResume() event
(5)如果在Android模拟器上按Back按钮,可观察以下显示内容:
08-07 03:55:27.779: DEBUG/Events(378):In the onPause() event 08-07 03:55:27.779: DEBUG/Events(378):In the onStop() event 08-07 03:55:27.779: DEBUG/Events(378):In the onDestroy() event
(6)按住Home按钮不放,同时单击Activities图标可以看到以下内容:
08-07 04:05:27.779: DEBUG/Events(378):In the onCreate () event 08-07 04:05:27.779: DEBUG/Events(378):In the onStart () event 08-07 04:05:27.779: DEBUG/Events(378):In the onResume () event
(7)按下Android模拟器上的Phone按钮,当前活动就会被推到后台,观察LogCat窗口中的输出:
08-07 04:15:27.779: DEBUG/Events(378):In the onPause() event 08-07 04:15:27.779: DEBUG/Events(378):In the onStop() event
(8)注意,onDestroy()事件并没有被调用,表明这个活动仍旧在内存中。按Back按钮退出电话拨号程序,活动又再次显示了。观察LogCat窗口中的输出:
08-07 04:18:27.779: DEBUG/Events(378):In the onCreate() event 08-07 04:18:27.779: DEBUG/Events(378):In the onStart () event 08-07 04:18:27.779: DEBUG/Events(378):In the onResume () event
1.6.1 应用活动的样本与主题
默认情况下,一个活动占据整个屏幕。然而,也可以对活动应用一个对话框主题,使其显示为一个浮动对话框。例如,打算定制一个活动,以弹出窗口的形式显示它,用来提醒用户执行的一些操作。在这种情况下,以对话框形式显示活动来引起用户的注意是个很好的方法。
要对活动应用对话框主题,只要修改AndroidManifest.xml文件中Activity元素,添加android:theme属性即可:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.learn2develop.Activities" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@android:style/Theme.Dialog" > <!-- android:theme="@android:style/Theme.Dialog" --> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-sdk android:minSdkVersion="9" /> </manifest>
这样可以使用活动显示一个对话框,如图1-38所示。
图1-38 显示对话框
1.6.2 显示对话框
用户经常需要显示一个对话框窗口,以便从用户那里得到确认。这时,可以重写在Activity基类中定义的受保护的onCreateDialog()方法来显示一个对话框。
【实现步骤】
(1)在Eclipse环境下,创建一个名为ExampeDialog的工程。
(2)打开res/values目录下的strings.xml,在其中输入如下代码。
<resources> <string name="app_name">ExampleDialog</string> <string name="hello_world">ExampleDialog</string> <string name="menu_settings">Settings</string> <string name="title_activity_main">ExampleDialog</string> </resources>
(3)打开res/layout目录下的main.xml文件,将其中已有的代码替换为如下代码。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello_world" /> <Button android:id="@+id/btn_dialog" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Click to display a dialog" /> </LinearLayout>
(4)打开src/com.example.exampledialog目录下的MainActivity.java文件,将其中代码代换为如下代码。
package com.example.exampledialog; import android.os.Bundle; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.view.View; import android.widget.Button; import android.widget.Toast; import android.app.ProgressDialog; import android.os.Handler; import android.os.Message; public class MainActivity extends Activity { CharSequence[] items = { "Google", "IBM", "Microsoft" }; boolean[] itemsChecked = new boolean [items.length]; /** 当活动第一次被创建时调用 */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button btn = (Button) findViewById(R.id.btn_dialog); btn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { showDialog(0); } }); } @Override protected Dialog onCreateDialog(int id) { switch (id) { case 0: return new AlertDialog.Builder(this) .setIcon(R.drawable.ic_action_search) .setTitle("这是一个带简单文本的对话框") setPositiveButton("确定", new DialogInterface.OnClickListener(){ public void onClick(DialogInterface dialog, int whichButton) { Toast.makeText(getBaseContext(), "确定clicked!",Toast.LENGTH_SHORT).show(); } }); .setNegativeButton("取消", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { Toast.makeText(getBaseContext(), "取消clicked!",Toast.LENGTH_SHORT).show(); } }); .setMultiChoiceItems(items, itemsChecked, new DialogInterface.OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { Toast.makeText(getBaseContext(), items[which]+(isChecked?" 选中!":"未选中!"), Toast.LENGTH_SHORT).show(); } } ) .create(); } return null; } }
按F11键在Android模拟器上调试应用程序。单击“Click to display a dialog”按钮得到如图1-39所示的效果。
图1-39 单击按钮显示对话框
以上代码使用setPositionButton()和setNegativeButton()方法分别设置了两个按钮:“确定”和“取消”。还可以通过setMultiChoiceItems()方法设置一个复选框列表供用户选择。对于setMultiChoiceItems()方法,需要传入两个数组:一个是要显示的项列表,另一个包含了表明每个项是否被选中的值。当选中一个项时,使用Toast类来显示一条信息,如图1-40所示。
图1-40 使用Toast类来显示信息效果
1.6.3 显示进度条对话框
除了前面介绍的普通对话框外,还可以创建进度条对话框。进度条对话框对于显示一些活动的进度有用,如下载操作的状态。
【实现步骤】
(1)使用1.6.2节创建的同一个工程,在MainActivity.java文件中添加以下加框代码。
(2)按F11键在Android模拟器上对应用程序进行调试。单击按钮即可显示进度条对话框,如图1-41所示。注意观察进度条将累计到100。
图1-41 进度条对话框