Android开发环境搭建的教程网上很多,读者可自行百度之,可能在这个过程中遇到一些问题,比如Google的网站连不上或者ADT与Eclipse版本不匹配等等。这些问题应该都是可以通过百度得到答案的。网上很多的教程都是下载JDK,Eclipse,SDK,ADT,然后安装这样讲的,很多小伙伴在按照教程做的时候遇到了不少的问题,虽然最终问题得到了解决,但这个过程比较闹心。这里提供一种捷径,直接从Android Developer的官网下载集成了JDK,Eclipse,SDK,ADT的Android Studio开发环境。下载后直接启动就可以了,不需要在线下载SDK工具,安装ADT等等。传送门:
本章节的重点是说Android的Activity。通过讲如何创建Activity来熟悉Android 工程的结构。至于Activity是什么,百度也会告诉你。这里只简单地说一下概念,更详细的关于原理的东西会在今后的章节中详细讨论。下面的这段解释非我原创,我觉得很好就引用过来了。这段话的原始链接:http://www.cnblogs.com/tekkaman/archive/2011/06/07/2074211.html,感谢博客园的Tekkaman
一个Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,例如拨号、拍照、发送email、看地图。每一个activity被给予一个窗口,在上面可以绘制用户接口。窗口通常充满屏幕,但也可以小于屏幕而浮于其它窗口之上。
一个应用程序通常由多个activities组成,他们通常是松耦合关系。通常,一个应用程序中的activity被指定为"main"activity,当第一次启动应用程序的时候呈现给用户的那个activity。每一个activity然后可以启动另一个activity为了完成不同的动作。每一次一个activity启动,前一个activity就停止了,但是系统保留activity在一个栈上(“back stack”)。当一个新activity启动,它被推送到栈顶,取得用户焦点。Back Stack符合简单“后进先出”原则,所以,当用户完成当前activity然后点击back按钮,它被弹出栈(并且被摧毁),然后之前的activity恢复。
当一个activity因新的activity启动而停止,它被通知这种状态转变通过activity的生命周期回调函数。有许多回调函数一个activity可能会收到,源于它自己的状态变化-无论系统创建它、停止它、恢复它、摧毁它-并且每个回调提供你完成适合这个状态的指定工作的机会。例如,当停止的时候,你的activity应该释放任何大的对象,例如网络数据库连接。当activity恢复,你可以重新获得必要的资源和恢复被中断的动作。这些状态转换都是activity的生命周期的部分。
下面有一个Activiy Life Circle的图奉上,非原创,但比较经典。
Activity应该包含三个主体部分,1)Activity 类 2 )Layout 3)AndroidManifest.xml 注册,说主体部分是因为Activity可能包含TextView、Drawable、String等元素。这些需要在R.java中注册。这些非必须的不算在主体内容中。
下面就是一个登录功能的Activity.
package com.example.androidexample;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.business.*;
public class LoginActivity extends Activity {
private EditText etUserName;
private EditText etPassWord;
private Button btnLogin;
private Button btnReset;
private String username;
private String password;
private Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_login);
btnLogin = (Button)super.findViewById(R.id.btnLogin);
btnReset = (Button)super.findViewById(R.id.btnReset);
btnLogin.setOnClickListener(btnLoginListener);
btnReset.setOnClickListener(btnResetListener);
}
private OnClickListener btnLoginListener = new OnClickListener(){
@Override
public void onClick(View arg0) {
etUserName = (EditText)findViewById(R.id.etUserName);
etPassWord = (EditText)findViewById(R.id.etPassWord);
username = etUserName.getText().toString();
password = etPassWord.getText().toString();
if(SystemManager.Login(username, password))
{
Toast.makeText(LoginActivity.this,"Login Success.",Toast.LENGTH_LONG).show();
intent = new Intent(LoginActivity.this, UserInfoActivity.class);
//启动Activity
startActivity(intent);
}
Toast.makeText(LoginActivity.this,"Login Fail.",Toast.LENGTH_LONG).show();
}
};
private OnClickListener btnResetListener = new OnClickListener(){
@Override
public void onClick(View arg0) {
etUserName = (EditText)findViewById(R.id.etUserName);
etPassWord = (EditText)findViewById(R.id.etPassWord);
etUserName.setText("");
etPassWord.setText("");
}
};
}
一个Activity类会继承一个Activity父类,并且要实现父类的onCreate方法。这里在调用父类的onCreate方法的同时,我们需要指定Layout。Layout文件定义在res->layout目录下,这是一个xml文件,里面包含了一些界面元素。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tvUserName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/txtUserName">
</TextView>
<EditText
android:id="@+id/etUserName"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="text"/>
<TextView
android:id="@+id/tvPassWord"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/txtPassWord">
</TextView>
<EditText
android:id="@+id/etPassWord"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<Button
android:id="@+id/btnReset"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:text="@string/btnReset"
android:layout_weight="1"/>
<Button
android:id="@+id/btnLogin"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:text="@string/btnLogin"
android:layout_weight="1"/>
</LinearLayout>
</LinearLayout>
登录功能很简单,输入用户名和密码即可登录,这时候就涉及到Activity的跳转了。关于Activity的跳转的方式有很多,我这里使用的是一种最简单的方式。在Activity代码里面已经有了。
intent = new Intent(LoginActivity.this, UserInfoActivity.class);
//启动Activity
startActivity(intent);
intent是一个在Activity之间传递消息的对象。能够关联两个Activity,并且可以将父Activity的某些参数传递给链接到的子Activity。由于是Android 4.0的界面看上不有点傻(个人观点)
下一个章节我们来说说布局的事情。