Hi,众猿们,今天给大家讲讲在安卓开发中如何使用Activity吧,主要有以下几个问题:
先谈谈Activity的创建和使用,首先,我们在项目的res/layout文件夹下创建一个xml布局文件(暂且命名为main.xml吧,众猿们要记住布局文件这个词),并在其中添加一个按钮控件,其内容如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btnButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"/>
LinearLayout>
接下来,我们新建一个Activity(命名为MainActivity,其继承自android.content包下的Activity类),其代码为:
public class MainActivity extends Activity {
Button btnButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnButton = (Button) findViewById(R.id.btnButton);
btnButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
Toast.makeText(MainActivity.this, "按钮被点击", Toast.LENGTH_LONG).show();
}
});
}
}
最后,就是在Android清单文件中注册我们自定义的Activity了,我们直接在application标签下添加如下标签即可:
<activity
android:name="lmz.activityexample.atys.MainActivity"/>
好了,一个Activity就创建完毕了(众猿们是不是觉得本猿猿说得很繁琐,其实本猿猿也是这样觉得的)。
接下来,就是怎么取消activity上面的标题栏了(titlebar),
我们可以在自定义activity中添加代码:
requestWindowFeature(Window.FEATURE_NO_TITLE);
也可以在清单文件中为activity添加属性:
android:theme="@android:style/Theme.Black.NoTitleBar"
如果我们在清单文件的application标签中添加属性:
android:theme="@android:style/Theme.Black.NoTitleBar"
则应用中所有的activity都不会有标题栏。
接下来是activity全屏的方法:
在activity中添加代码:
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
在清单文件中为activity添加属性:
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
接下来介绍清单文件中activity的其它属性:
接下来是退出应用的方法:在退出应用时,我们要销毁掉所有的activity,我们先来定义一个基类activity:
public class ActivityList {
private static List mAtyList = new ArrayList();
public static void add(Activity activity){
mAtyList.add(activity);
}
public static void remove(Activity activity){
mAtyList.remove(activity);
}
public static void quitApp(){
for(Activity activity : mAtyList){
if (!activity.isFinishing()) {
activity.finish();
}
}
}
}
在定义一个基类的activity:
public class BaseActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityList.add(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityList.remove(this);
}
}
这样当我们通过ActivityList类名调用quitApp方法时,就可以完全退出应用了。
接下来,我们聊聊Intent(意图)对象,当我们需要从一个activity跳转到另一个activity(即从一个界面跳转到另一个界面)时,就需要使用意图对象,意图分为两种,一种是显式的,没什么可讲,一种是隐式的,可以用来启动其它应用的activity。在接触隐式意图前,我们先了解一下意图过滤器,意图过滤器由action、category和data三个属性组成,意图过滤器至少要有一个action值,可以有多个category值,一般要配置在清单文件的activity标签下。当我们需要使用隐式意图启动activity时,一般需要也需要为意图配置action和category值,这样系统会自动分析该意图并启动具有相同意图过滤器的activity(优先匹配action值)。
当应用被启动时,系统也是根据activity的意图过滤器来决定首先启动那个应用时,该意图过滤器的值为:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
intent-filter>
在用意图启动activity时,我们还可以利用意图来传递数据,像传递整数、字符串等数值时,可以直接放在intent对象类,也可以利用Bunlde对象,当需要传递一个类时,需要该类实现了Serializable序列化接口。
在意图过滤器中,还有一个属性:data,该属性指定了启动该activity时需要的数据,只有当意图中携带的数据与启动启动activity时需要的数据一致时,该activity才会被启动,其由五部分组成:
如:用隐式意图来启动系统浏览器访问指定网址:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("www.baidu.com"));
startActivity(intent);
此外,启动activity并接受返回结果主要涉及到三个方法:
onActivityResult
最后还是每日一乐吧:
从前有个全国管理系统,是孙中山做的设计,老蒋做的实现,结果老毛写了个病毒,趁着日本黑客对系统做攻击的当口,拿到了管理员权限,把原来那批程序员给隔离了。老邓接手以后,重构代码,出了个2.0版,为了开发速度,遗留了一堆BUG没处理。人们纷纷质疑:是不是核心构架太单一,双核会不会好点?