您的位置:首页 > 移动开发 > Android开发

[Android Develop_001]-开发环境及Activity

2014-09-27 08:42 183 查看
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的界面看上不有点傻(个人观点)

下一个章节我们来说说布局的事情。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: