Android---(2),Activity,风格和主题

时间:2012/11/12

书籍:Beginning.Android.4.Application.Development

开发环境:eclipse


---一个Activity是一个与用户交互的窗口,一个程序又一个或者多个Activities,从一个窗口出现在屏幕上到它被隐藏,它经历了几个阶段,称之为生命周期(life cycle)。

--Android 4.0支持f'ragment特性,fragment类似于微型的Activity。

--除了Activity之外,另一个重要的概念是intent ,它用来协调多个Activity的共同工作


1.Activity

--可以用一个继承Activity的java类来创建一个Activity。如下:

package net.learn2develop.Activity101;
import android.app.Activity;
import android.os.Bundle;
public class Activity101Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
(1)新创建的Activity类可以从res/layout中的xml文件载入它的UI界面,使用setContentView方法,例如:setContentView(R.layout.main)。

(2)每一个你所创建的活动类必须在AndroidManifest.xml中申明,如下:

<?xml version=“1.0“ encoding=“utf-8“?>
<manifest xmlns:android=“http://schemas.android.com/apk/res/android“
package=”net.learn2develop.Activity101”
android:versionCode=”1”
android:versionName=”1.0” >
<uses-sdk android:minSdkVersion=”14” />
<application
android:icon=”@drawable/ic_launcher”
android:label=”@string/app_name” >
<activity
android:label=”@string/app_name”
android:name=”.Activity101Activity” >
<intent-filter >
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
</application>
</manifest>

(3)一个Activity有一系列的方法,从而构成一个Activity的life cycle,如下:

1.onCreate()--当活动第一次被调用的时候执行。

2.onStart()--当用户看到活动的时候开始执行

3.onResume()--当活动开始和用户交互的时候开始执行

4.onPause()--当当前活动被暂停的时候执行

5.onStop()--当活动不再被用户看见的时候执行

6.onDestroy()--当活动被系统销毁之前执行

7.onRestart()--当活动停止再开始的时候执行

如下图所示:

2.Activity的主题和风格

--在默认的情况下,一个Activity会在整个屏幕运行,但也可以修改成其他风格。例如dialog风格。
(1)修改程序的风格只需在AndroidManifest.xml中<Activity>元素即可,如下:
<?xml version=“1.0“ encoding=“utf-8“?>
<manifest xmlns:android=“http://schemas.android.com/apk/res/android“
package=”net.learn2develop.Activity101”
android:versionCode=”1”
android:versionName=”1.0” >
<uses-sdk android:minSdkVersion=”14” />
<application
android:icon=”@drawable/ic_launcher”
android:label=”@string/app_name”
android:theme=”@android:style/Theme.Dialog”>
<activity
android:label=”@string/app_name”
android:name=”.Activity101Activity” >
<intent-filter >
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
</application>
</manifest>
其中android:theme="@android:style/Theme.Dialog"指定了程序是以Dialog的风格来运行。
(2)显示一个Dialog窗口
--要创建一个Dialog窗口,要实现以下几步。
1.首先要在Activity类中实现onCreateDialog()方法。如下:
@Override
protected Dialog onCreateDialog(int id) {
//...
}
2.onCreateDialog方法会在你调用showDialog方法的时候调用:
public void onClick(View v) {
showDialog(0);
}
----onCreateDialog方法是用来在Activity中创建dialog窗口的方法,当你调用showDialog时,这个方法会被调用来创建一个Dialog窗口。它接受一个int类型的参数来指定要创建那种窗口。
3.在onCreateDialog方法中创建Dialog,要用AlertDialog 类的 Builder 构造方法
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case 0:
return new AlertDialog.Builder(this)
.setIcon(R.drawable.ic_launcher)
.setTitle(“This is a dialog with some simple text...”)
.setPositiveButton(“OK”,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton)
{
Toast.makeText(getBaseContext(),
“OK clicked!”, Toast.LENGTH_SHORT).show();
}
}
)
.setNegativeButton(“Cancel”,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton)
{
Toast.makeText(getBaseContext(),
“Cancel clicked!”, Toast.LENGTH_SHORT).show();
}
}
)
.setMultiChoiceItems(items, itemsChecked,
new DialogInterface.OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog,
int which, boolean isChecked) {
Toast.makeText(getBaseContext(),
items[which] + (isChecked ? “ checked!”:” unchecked!”),
Toast.LENGTH_SHORT).show();
}
}
).create();
}
return null;
}
a.这个方法用setPositiveButton() 和setNegativeButton()来创建两个按钮,分别是OK和Cancel。同时,setMultiChoiceItems()显示了一个checkBox的列表。
b.setMultiChoiceItems()这个方法,要传入两个数组---一个数组是用于显示信息(此处是Google等公司名)另外一个是用来包含每个checkBox项的值(此处是一个boolean数组,用来表示是否选中)。
c.当一个选项被选中的时候,用Toast类来给用户提示信息。用于提示哪个被选中

(3)显示一个progress dialog
--要创建一个progress dialog,首先要创建一个ProgressDialog类的实例并调用它的show()方法。在这里我们用一个阻碍Ui进程的方法来展示Progress Dialog
1.progress dialog类并调用show方法
//---show the dialog---
final ProgressDialog dialog = ProgressDialog.show(
this, “Doing something”, “Please wait...”, true);
2.创建一个线程来阻塞UI线程
new Thread(new Runnable(){
public void run(){
try {
//---simulate doing something lengthy---
Thread.sleep(5000);
//---dismiss the dialog---
dialog.dismiss();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
此方法用sleep来使UI线程阻塞五秒。然后dialog的dismiss方法会被调用,ProgressDialog便会消失。

(4)一个更加Sophisticated的ProgressDialog
--创建一个可以显示后台任务进度(例如下载进度的ProgressDialog)。
1.创建一个Progressdialog指定它的各种属性。
用setIcon,setTile等方法可以指定图标和标题。
progressDialog = new ProgressDialog(this);
progressDialog.setIcon(R.drawable.ic_launcher);
progressDialog.setTitle(“Downloading files...”);
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
2.设置两个button --->OK和Cancel
---如文中已有的描述,用setButton方法可以设置negativebutton和positivebutton,只需要传入DialogInterface.BUTTION_POSITIVE或者DialogInterface.BUTTION_NEGATIVE即可。
progressDialog.setButton(DialogInterface.BUTTON_POSITIVE, “OK”,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton)
{
Toast.makeText(getBaseContext(),
“OK clicked!”, Toast.LENGTH_SHORT).show();
}
});
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, “Cancel”,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton)
{
Toast.makeText(getBaseContext(),
“Cancel clicked!”, Toast.LENGTH_SHORT).show();
}
});
return progressDialog;

3.设置进度条
--用thread类可以用来阻塞(block)UI线程。
如下:
progressDialog.setProgress(0);
new Thread(new Runnable(){
public void run(){
for (int i=1; i<=15; i++) {
try {
//---simulate doing something lengthy---
Thread.sleep(1000);
//---update the dialog---
progressDialog.incrementProgressBy((int)(100/15));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
progressDialog.dismiss();
}
}).start();
 其中setProgress用来设置初始的进度(为0),然后下面的for循环每次调用incrementProgressBy方法,用来将进度条每次增加100/15.循环15次之后可以到达100的状态。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值