初学Android手机开发

      暑假过的飞快,在蓝杰集训的最后几天,在斌哥的带领下我们进行了Android手机开发的初步培训,由于回家的时间一定,无奈只上了两节课,但也已经能够写出自己的第一个手机应用,甚至于做出一个简单的画图板来了,我把我这两天所有总结一下。
       第一步的环境搭建略过不谈,我讲一下Android应用程序的组成。

一般来说Android主要由一下 四部分组成



Activity       Activity代表手机屏幕的一屏.一般一个Android应用是由多个Activity组成,这多个Activity可以相互跳转.当打开一个新屏幕的时候,之前的屏幕会被置为暂停状态并被压入历史堆栈中,用户可以通过回退操作返回以前打开的屏并且可以有选择性的选择删除没必要保留的屏.Activity是由Android维护的,有其自己的生命周期(产生、运行和销毁).

        在多个Activity中跳转我们就需要用到Intent.Intent就是一次对将要执行的操作的抽象描述.

        与Intent有关系的是Intent Filters.Intent filters用于描述一个Activity能够操作哪写Intent.一般在AndroidMainfest.xml中定义.



Broadcast Intent Recevier        可以使用BroadcastRecevier来让应用对外部的事件做出响应.不生成UI,用户是看不到的.BroadcastRecevier通过NotificationManager来通知用户这些事情发生了.BroadcastReceviers既可以在AndroidMainfest.xml中注册也可以在运行代码时使用Context.registerRecevier()进行注册.只要注册了,当事件来临的时候,即使程序没有启动, 系统也在需要的时候启动程序.各种应用还可以通过使用Context.sendBroadcast()将它们自己的intent broadcasts广播给其它应用程序.



•Service        控制应用程序的启动和暂停.startService(Intent service)启动Service,可以通过Context.bindService()来绑定一个Service



•Content Provider        数据在Android中是私有的,但是一个程序可以通过实现一个ContentProvider的抽象接口将自己的数据暴露出去.外界可以通过这一套标准而统一的接口和程序里的数据打交道.

第三个是Android里的 布局

•LinearLayout    
这是我们接触到的第一个Android布局,它的意思是将自己包含的子元素按照水平或竖直进行排列.可以通过设置android:orientation="vertical"或者android:orientation="horizontal"来实现.

•FrameLayout   
  好比一块在屏幕上提前预定好的空白区域,然后可以填充一些元素到里面.需要注意的是,所有的元素都被放置在FrameLayout区域最左上的区域.而且无法为这些元素制定一个确切的位置.如果一个FrameLayout里有多个子元素,那么后边的子元素的现实会重叠在前一个元素上.



•RelativeLayout     
相对布局方式.里面的元素按照相对位置来计算.需要注意的是,出于性能上的考虑,对于相对布局的精确位置的计算只会执行一次,所以,如果一个可视化组件B依赖于A,那么必须要让A出现在B的前边.



•TableLayout   
   表格式的布局,这种布局会把包含的元素以航和列的形式进行排列,表格的列数为每一行的最大列数.

就一个初学者的看法,在eclipse里面看起来,一个Android程序确实比Java程序要复杂了很多:src包下有程序所有的Java源代码,gen存放R文件,目录下的该文件是项目创建时自动生成,是只读文件,此文件存储了该项目中的所有资源的索引。
Android2.2目录:存放Android自身的jar包
assets目录:存放应用中用到的类似视频文件、MP3等一些媒体文件

res目录:资源文件夹,存放图片(drawable-hdpi,drawable-ldpi,drawable-mdpi文件夹)、页面布局文件(layout文件夹)、文字信息(values文件夹)

AndroidManifest.xml:功能清单文件,该文件列出了应用中所使用的所有组件,如Activity、Service等,比方说我如果新建了一个Activity如果不在AndroidManifest.xml中注册的话,程序就会出现异常关闭的错误。

default.properties:该文件存放了应用对应的一些环境配置,如应用要求运行 的最低Android版本。一般不需要手动去更改
proguard.cfg:混淆工具,这个据说我们不要去管


好了搞清楚了Android程序的组成,我也自己写了两个小应用,与以前大有不同的是res下的layout在编写的过程中遇到了xml标签语言,这个语言以前从来都没有接触过,所以现在只能照猫画虎的照着敲。出了问题也很难检查出来。

下面是一个简单的手机相册的代码示例:
这一部分是,第一个界面,通过一个简单是事件监听,可以切换到下一个界面,一个界面的背景是一张图片,下面的几个界面也是这个原理。

package cn.netjava.activity;

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;

public class FirstActivity extends Activity {

	// 定义属性
	EditText edit_name, edit_pwd;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		System.out.println("我的第一个手机程序");
		  getView();
	}

	// 创建监听器对象
	OnClickListener listener = new OnClickListener() {

		public void onClick(View v) {
			// 验证操作
			int id = v.getId();// 通过事件源得到选取组件的ID
			switch (id) {
			case R.id.btn_login:
				if ("1992523".equals(edit_name.getText().toString())) {

					// 创建intent对象,实现界面跳转,intent相当于信使RNA,可以传递数据,可以通过Intent启动另外一个Activity。
					Intent intent = new Intent(FirstActivity.this,
							SecondActivity.class);
					startActivity(intent);
				} else {
					Toast.makeText(FirstActivity.this, "您输入的用户名或者密码有误", 3).show();
				}
				break;

			case R.id.btn_reset:

				edit_name.setText("");
				edit_pwd.setText("");
				break;
			}

		}

	};

	
	
	
	
	public void getView() {
		// 通过id来找到组件对象
		Button btn_login = (Button) findViewById(R.id.btn_login);
		Button btn_reset = (Button) findViewById(R.id.btn_reset);
		edit_name = (EditText) findViewById(R.id.edit_name);
		edit_pwd = (EditText) findViewById(R.id.edit_pwd);
		//点击弹出提示信息
    	btn_login.setOnClickListener(listener);
    	btn_reset.setOnClickListener(listener);
	}
}





下面的代码是登陆界面的layout文件夹下的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="用户登录"
    android:textSize="30px"
    android:gravity="center_horizontal"
    />
     <!-- 嵌套布局    水平居中-->
     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	    android:orientation="horizontal"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:layout_gravity="center_horizontal"
   	 	>
   	 	<TextView  
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="账户"
    />
   	 	 <EditText
		    android:layout_width="100px" 
		    android:layout_height="wrap_content" 
		     android:id="@+id/edit_name"
	    	/>
   	 	 </LinearLayout>
   	 	 
   	 	  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	    android:orientation="horizontal"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:layout_gravity="center_horizontal"
   	 	>
   	 	<TextView  
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="密碼"
    
    />
   	 	 <EditText
		    android:layout_width="100px" 
		    android:layout_height="wrap_content" 
		    android:id="@+id/edit_pwd" 
	    	/>
   	 	 </LinearLayout>
   	 	  <!-- 按钮对象 -->
   	 	    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	    android:orientation="horizontal"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:layout_gravity="center_horizontal"
   	 	>
   	 	<Button  
		    android:layout_width="100px" 
		    android:layout_height="wrap_content" 
		    android:text="登陆"
			android:id="@+id/btn_login"
	    	/>
	    	<Button
		    android:layout_width="100px" 
		    android:layout_height="wrap_content" 
		    android:text="重置"
		    android:id="@+id/btn_reset"
	    	/>
    </LinearLayout>
</LinearLayout>


至于接下来的界面就更简单了,就只需要摆一个按钮就OK了。电子相册就这样了。


在后来的画板的制作中我还接触到了新的监听器onTouchKListener,就像java里面的MouseListener一样,能够跟随划过屏幕的事件。


在初步学习中我感觉还不太难,只要认真的学,细心的敲代码,好好体会java与Android的异同,在实践中提升自己的示例,我想一定会学好的。

猜你喜欢

转载自515037030.iteye.com/blog/1633302