跟着一个视频做的通讯录开发,但是那视频没录完,因此,我所做到的也到此,接下去的,如果要做的话,可以自己再去试试,不过,貌似没时间,看看书吧,很多基础还不扎实,先跟着做吧,那么我跟着学习的所有代码如下,
1、文件目录
2、具体的代码
2.1 MainActivity.java
package test.contact;
import java.util.ArrayList;
import java.util.HashMap;
import test.contact.db.DBHelper;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
public class MainActivity extends Activity {
GridView gv_button_menu;
ListView lv_userList;//用户列表
SimpleAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.setContentView(R.layout.main);
loadUserList();
}
private void loadUserList(){
lv_userList = (ListView)this.findViewById(R.id.lv_userlist);
ArrayList data = DBHelper.getInstance(this).getUserList();//这个方法在DBHelper里
adapter = new SimpleAdapter(this,
data, R.layout.list_item,
new String[]{"imageId","name","mobilePhone"},
new int[]{R.id.user_image,R.id.tv_showname,R.id.tv_showmobilephone});
lv_userList.setAdapter(adapter);
//listview里点击每一项就出现该内容的详细信息页面,这是每一项的响应事件
lv_userList.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
HashMap map = (HashMap)parent.getItemAtPosition(position);
Intent intent = new Intent(MainActivity.this,DetailActivity.class);
intent.putExtra("usermap",map);
//当requestCode为3的时候代表请求转向DetailActivity这个页面
startActivityForResult(intent,3);
}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_MENU){
//
if(gv_button_menu==null){
loadButtonMenu();
}
if(gv_button_menu.getVisibility()==View.GONE){
gv_button_menu.setVisibility(View.VISIBLE);
} else {
gv_button_menu.setVisibility(View.GONE);
}
}
return super.onKeyDown(keyCode, event);
}
//加载底部的菜单(gridView)
@SuppressWarnings("unchecked")
private void loadButtonMenu(){
gv_button_menu =(GridView) this.findViewById(R.id.gv_button_menu);
gv_button_menu.setBackgroundResource(R.drawable.menu_background);
gv_button_menu.setNumColumns(5);//设置有多少列
gv_button_menu.setGravity(Gravity.CENTER);//设置位置 居中
gv_button_menu.setVerticalSpacing(100);//设置水平间隔
gv_button_menu.setHorizontalSpacing(10);//设置垂直间隔
ArrayList data = new ArrayList();
//是gridview里的图片和底部的字 ,这些是构造data
HashMap map = new HashMap();
map.put("itemImage", R.drawable.menu_new);
map.put("itemText", "增加");
data.add(map);
map = new HashMap();
map.put("itemImage", R.drawable.menu_search);
map.put("itemText", "查找");
data.add(map);
map = new HashMap();
map.put("itemImage", R.drawable.menu_delete);
map.put("itemText", "删除");
data.add(map);
map = new HashMap();
map.put("itemImage", R.drawable.controlbar_showtype_list);
map.put("itemText", "菜单");
data.add(map);
map = new HashMap();
map.put("itemImage", R.drawable.menu_exit);
map.put("itemText", "退出");
data.add(map);
//创建Adapter
SimpleAdapter adapter =
new SimpleAdapter(this,data, R.layout.item_menu,new String[]{"itemImage","itemText"},new int[]{R.id.item_image,R.id.item_text});
//SimpleAdapter的参数有(context,listmapdata,resource,from,to),其中resource是布局,即item_menu.xml
//data中的map都将布局(resources)通过后面对应的两个联系起来
gv_button_menu.setAdapter(adapter);
//gridview只能展示,是个视图,而适配器就是将数据和展现方式联系起来的方式
gv_button_menu.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
//第一个参数代表所有数据
//HashMap map = (HashMap)parent.getItemAtPosition(1);
//postition是指弹出的那个ItemMenu里的项(如增加,查找,删除,菜单,退出等5个)
switch(position){
case 0:{
Intent intent = new Intent(MainActivity.this,AddNewActivity.class);
//0代表请求跳转到添加界面(AddNewActivity)
startActivityForResult(intent,0);
break;
}
case 1:{
break;
}
case 2:{
break;
}
case 3:{
break;
}
case 4:{
break;
}
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//resultCode表示跳转码
if(resultCode==0){
if(resultCode==1){
//增加用户成功 进行刷新
ArrayList userData = DBHelper.getInstance(this).getUserList();//这个方法在DBHelper里
adapter = new SimpleAdapter(this,
userData, R.layout.list_item,
new String[]{"imageId","name","mobilePhone"},
new int[]{R.id.user_image,R.id.tv_showname,R.id.tv_showmobilephone});
lv_userList.setAdapter(adapter);
} else if(resultCode==2){
//增加用户失败, 不进行刷新
}
}
super.onActivityResult(requestCode, resultCode, data);
}
}
2.2 DBHelper.java
package test.contact.db;
import java.util.ArrayList;
import java.util.HashMap;
import test.contact.entity.User;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper {
//将DBHelper构造成一个单例模式(1.写成私有 2.)
public final static String DB_NAME = "contact";
public final static int VERSION = 3;//数据库的版本
private static DBHelper instance = null;
private SQLiteDatabase db;//用这个SQLIiteDBHelper主要是为了初始化这个数据库
//单例模式
public static DBHelper getInstance(Context context){
if(instance==null){
instance = new DBHelper(context);
}
return instance;
}
private void openDatabase(){
if(db==null){
db = this.getWritableDatabase();
}
}
private DBHelper(Context context) {
super(context, DB_NAME,null, VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {//在这里把表建立起来,这个方法只执行一次,如果有表了,就不执行这个方法了
// TODO Auto-generated method stub
StringBuffer tableCreate = new StringBuffer();
tableCreate.append("create table user( _id integer primary key autoincrement,")
.append("name text,")
.append("mobilePhone text,")
.append("familyPhone text,")
.append("officePhone text,")
.append("address text,")
.append("position text, ")
.append("company text,")
.append("email text,")
.append("otherContact text ,")
.append("zipCode text,")
.append("remark text,")
.append("imageId int)");
db.execSQL(tableCreate.toString());
}
//如果数据库版本不一致才执行,一般做法是:清除数据库然后重新建表
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
String sql = "drop table if exists user";
db.execSQL(sql);
onCreate(db);
}
//保存,把user当作一个对象,将增加联系人的信息都存到这里来
public long save(User user){
openDatabase();//每次增加记录的时候,open一下
ContentValues value = new ContentValues();
value.put("name", user.name);
value.put("mobilePhone", user.mobilePhone);
value.put("familyPhone", user.familyPhone);
value.put("officePhone", user.officePhone);
value.put("address", user.address);
value.put("position", user.position);
value.put("company", user.company);
value.put("email", user.email);
value.put("otherContact", user.otherContact);
value.put("zipCode", user.zipCode);
value.put("remark", user.remark);
value.put("imageId", user.imageId);
return db.insert("user", null, value);
//就是点击保存后能回到主界面
}
//获得数据放在用户列表中
public ArrayList getUserList(){
openDatabase();
Cursor cursor = db.query("user", null, null, null, null, null, null);//查询表的一些条件
ArrayList list = new ArrayList();
while(cursor.moveToNext()){
HashMap map = new HashMap();
//我们这里将所有的数据都填充进来,如果需要展现,可以在具体的类中选择要展示的
map.put("_id", cursor.getInt(cursor.getColumnIndex("_id")));
map.put("familyPhone", cursor.getString(cursor.getColumnIndex("familyPhone")));
map.put("officePhone", cursor.getString(cursor.getColumnIndex("officePhone")));
map.put("company", cursor.getString(cursor.getColumnIndex("company")));
map.put("position", cursor.getString(cursor.getColumnIndex("position")));
map.put("email", cursor.getString(cursor.getColumnIndex("email")));
map.put("address", cursor.getString(cursor.getColumnIndex("address")));
map.put("otherContact", cursor.getString(cursor.getColumnIndex("otherContact")));
map.put("zipCode", cursor.getString(cursor.getColumnIndex("zipCode")));
map.put("remark", cursor.getString(cursor.getColumnIndex("remark")));
map.put("imageId",cursor.getInt(cursor.getColumnIndex("imageId")));
map.put("name", cursor.getString(cursor.getColumnIndex("name")));
map.put("mobilePhone", cursor.getString(cursor.getColumnIndex("mobilePhone")));
list.add(map);
}
return list;
}
}
2.3 User.java
package test.contact.entity;
public class User {
public int _id;
public int imageId;
public String name;
public String mobilePhone;
public String familyPhone;
public String position;
public String company;
public String address;
public String zipCode;
public String email;
public String otherContact;
public String remark;
public String officePhone;
}
2.4 AddNewActivity.java
package test.contact;
import test.contact.db.DBHelper;
import test.contact.entity.User;//引入user的包
import test.contact.entity.User;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Gallery;
import android.widget.ImageButton;
import android.widget.ImageSwitcher;
import android.widget.ImageView;
import android.widget.Toast;
import android.widget.ViewSwitcher.ViewFactory;
public class AddNewActivity extends Activity {
ImageButton btn_img;
AlertDialog imageChooseDialog;
Gallery gallery;
ImageSwitcher is;
int imagePosition;//在图片选择中确定按钮是提交的图片的id,如果默认的话,值为0
//增加联系人信息的这个界面里的那些编辑框
EditText et_name;
EditText et_mobliePhone;
EditText et_familyPhone;
EditText et_officePhone;
EditText et_position;
EditText et_company;
EditText et_address;
EditText et_zipCode;
EditText et_email;
EditText et_otherContact;
EditText et_remark;
Button btn_save;
Button btn_return;
private int[] images={
R.drawable.icon,
R.drawable.image1,R.drawable.image2,
R.drawable.image3,R.drawable.image4,
R.drawable.image5,R.drawable.image6,
R.drawable.image7,R.drawable.image8,
R.drawable.image9,R.drawable.image10};
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.addnew);
initWidget();//初始化这个界面里的EditText和两个Button
//响应"保存"按钮事件
btn_save = (Button)this.findViewById(R.id.btn_save);
btn_save.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String name = et_name.getText().toString();
if(name.equals("")){
Toast.makeText(AddNewActivity.this, "姓名不能为空", Toast.LENGTH_LONG).show();
return;
}
String mobilePhone = et_mobliePhone.getText().toString();
String officePhone = et_officePhone.getText().toString();
String familyPhone = et_familyPhone.getText().toString();
String position = et_position.getText().toString();
String company = et_company.getText().toString();
String address = et_address.getText().toString();
String email = et_email.getText().toString();
String zipCode = et_zipCode.getText().toString();
String otherContact = et_otherContact.getText().toString();
String remark = et_remark.getText().toString();
//如果没有给Image赋图像,那么imageId默认为0,
//所以在上面的Image里的第一个是icon,作为默认的那个图片
int imageId = images[imagePosition];
//联系人
User user = new User();
user.address = address;
user.company = company;
user.email = email;
user.familyPhone = familyPhone;
user.imageId = imageId;
user.mobilePhone = mobilePhone;
user.otherContact = otherContact;
user.name = name;
user.officePhone = officePhone;
user.position = position;
user.remark = remark;
user.zipCode = zipCode;
//保存用户信息到数据库,执行后就到了DBHelper里的save方法了
//如果保存成功就发出提示信息
long success = DBHelper.getInstance(AddNewActivity.this).save(user);
if(success!=-1){
Toast.makeText(AddNewActivity.this, "添加成功!", Toast.LENGTH_LONG);
//resultCode为1时表示增加用户成功,返回到主界面
setResult(1);
finish();
} else {
Toast.makeText(AddNewActivity.this, "添加失败,请重新操作!", Toast.LENGTH_SHORT);
//resultCode为1时表示增加用户失败
setResult(2);
finish();
}
}
});
//实现的主要是修改Image按钮里的东西
btn_img=(ImageButton)this.findViewById(R.id.btn_img);
btn_img.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
initImageChooseDialog(); //当点击选择图片(即名字旁边的图片按钮时的方法)
imageChooseDialog.show();
}
});
//返回按钮的响应事件
btn_return.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
setResult(2);
finish();
}
});
}
//写个方法将这个界面的编辑框和保存取消等控件都初始化
public void initWidget(){
et_name=(EditText)this.findViewById(R.id.et_name);
et_mobliePhone=(EditText)this.findViewById(R.id.et_mobilephone);
et_familyPhone=(EditText)this.findViewById(R.id.et_familyphone);
et_officePhone=(EditText)this.findViewById(R.id.et_officephone);
et_position=(EditText)this.findViewById(R.id.et_position);
et_company=(EditText)this.findViewById(R.id.et_company);
et_address=(EditText)this.findViewById(R.id.et_address);
et_zipCode=(EditText)this.findViewById(R.id.et_zipcode);
et_email=(EditText)this.findViewById(R.id.et_email);
et_otherContact=(EditText)this.findViewById(R.id.et_other);
et_remark=(EditText)this.findViewById(R.id.et_remark);
btn_save=(Button)this.findViewById(R.id.btn_save);
btn_return=(Button)this.findViewById(R.id.btn_return);
}
private void initImageChooseDialog(){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("请选择图像");
//添加选择和取消图片的按钮
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
btn_img.setImageResource(images[imagePosition]);//在选中一张图片后,获得这个图片的id,才能选中它了
}
});
builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.imageswitch, null);
//1、Gallery的东西需要显示出来,
gallery = (Gallery) view.findViewById(R.id.img_gallery);
gallery.setAdapter(new ImageAdapter(this));
gallery.setSelection(images.length/2);//定位中中间的图片
//2、Switcher方面,选中图片
is=(ImageSwitcher) view.findViewById(R.id.image_switcher);
is.setFactory(new MyViewFactory(this));
//1.1 Gallery的响应事件
gallery.setOnItemSelectedListener(new OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int position, long arg3) {
// TODO Auto-generated method stub
imagePosition = position;
is.setImageResource(images[position%images.length]);//取余
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
});
builder.setView(view);
imageChooseDialog = builder.create();
}
//Gallery的Adapter,实现BaseAdapter内部类
class ImageAdapter extends BaseAdapter{
private Context context;
public ImageAdapter(Context context){
this.context=context;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
//return images.length;
//实现在imageswitch.xml即那个弹出来要早增加图片的界面,其中的图片让其循环出现
return Integer.MAX_VALUE;//使得它返回一个比较大的值
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ImageView iv = new ImageView(context);
iv.setImageResource(images[position%images.length]);
iv.setAdjustViewBounds(true);//设置适应视图的大小
iv.setLayoutParams(new Gallery.LayoutParams(80,80));//设置其大小
//设置图片之间的间隔
iv.setPadding(15, 10, 15, 10);
return iv;
}
}
//Switcher的Factory,实现ViewFactory的内部类
class MyViewFactory implements ViewFactory{
private Context context;//需要的上下文
public MyViewFactory(Context context){
this.context=context;
}
@Override
public View makeView() {
// TODO Auto-generated method stub
ImageView iv = new ImageView(context);
iv.setLayoutParams(new ImageSwitcher.LayoutParams(90,90));
return iv;
}
}
}
2.5 DetailActivity.java
package test.contact;
import java.util.HashMap;
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.ImageButton;
public class DetailActivity extends Activity {
EditText et_name;
EditText et_mobliePhone;
EditText et_familyPhone;
EditText et_officePhone;
EditText et_position;
EditText et_company;
EditText et_address;
EditText et_zipCode;
EditText et_email;
EditText et_otherContact;
EditText et_remark;
ImageButton btn_img;
HashMap map;
//三个按钮(修改,删除,返回)
Button btn_modify;
Button btn_return;
Button btn_delete;
boolean flag=false;//标识位
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.detail);
Intent intent = getIntent();
map = (HashMap)intent.getSerializableExtra("usermap");
initWidget();
displayData();
setEditTextDisable();
//响应修改按钮事件
btn_modify.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
setEditTextAble();
if(flag){//flag为true时(之前flag初始为false)
flag = false;
btn_modify.setText("修改");
setEditTextDisable();
}else {//flag为false时
flag = true;
btn_modify.setText("保存");
setEditTextAble();
}
}
});
}
//写个方法将这个界面的编辑框和保存取消等控件都初始化
public void initWidget(){
et_name=(EditText)this.findViewById(R.id.et_name);
et_mobliePhone=(EditText)this.findViewById(R.id.et_mobilephone);
et_familyPhone=(EditText)this.findViewById(R.id.et_familyphone);
et_officePhone=(EditText)this.findViewById(R.id.et_officephone);
et_position=(EditText)this.findViewById(R.id.et_position);
et_company=(EditText)this.findViewById(R.id.et_company);
et_address=(EditText)this.findViewById(R.id.et_address);
et_zipCode=(EditText)this.findViewById(R.id.et_zipcode);
et_email=(EditText)this.findViewById(R.id.et_email);
et_otherContact=(EditText)this.findViewById(R.id.et_other);
et_remark=(EditText)this.findViewById(R.id.et_remark);
btn_img = (ImageButton)this.findViewById(R.id.btn_img);
btn_modify=(Button)this.findViewById(R.id.btn_modify);
btn_delete=(Button)this.findViewById(R.id.btn_delete);
btn_return=(Button)this.findViewById(R.id.btn_return);
}
//刚进去后,所有的内容都无法修改。就是对应detail页面,进去后是无法修改的
private void setEditTextDisable(){
et_name.setEnabled(false);
et_mobliePhone.setEnabled(false);
et_familyPhone.setEnabled(false);
et_officePhone.setEnabled(false);
et_position.setEnabled(false);
et_company.setEnabled(false);
et_address.setEnabled(false);
et_zipCode.setEnabled(false);
et_email.setEnabled(false);
et_otherContact.setEnabled(false);
et_remark.setEnabled(false);
btn_img.setEnabled(false);
}
//点击修改后,所有的控件都是可编辑的
private void setEditTextAble(){
et_name.setEnabled(true);
et_mobliePhone.setEnabled(true);
et_familyPhone.setEnabled(true);
et_officePhone.setEnabled(true);
et_position.setEnabled(true);
et_company.setEnabled(true);
et_address.setEnabled(true);
et_zipCode.setEnabled(true);
et_email.setEnabled(true);
et_otherContact.setEnabled(true);
et_remark.setEnabled(true);
btn_img.setEnabled(true);
}
private void displayData(){
et_name.setText(String.valueOf(map.get("name")));
et_mobliePhone.setText(String.valueOf(map.get("mobilephone")));
et_familyPhone.setText(String.valueOf(map.get("familyPhone")));
et_officePhone.setText(String.valueOf(map.get("officePhone")));
et_position.setText(String.valueOf(map.get("position")));
et_company.setText(String.valueOf(map.get("company")));
et_address.setText(String.valueOf(map.get("address")));
et_zipCode.setText(String.valueOf(map.get("zipCode")));
et_email.setText(String.valueOf(map.get("email")));
et_otherContact.setText(String.valueOf(map.get("otherContact")));
et_remark.setText(String.valueOf(map.get("remark")));
btn_img.setImageResource(Integer.parseInt(String.valueOf(map.get("imageId"))));
}
}
3、所有的布局文件
3.1 main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
android:id="@+id/list_ll"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView
android:id="@+id/lv_userlist"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
></ListView>
</LinearLayout>
<GridView
android:id="@+id/gv_button_menu"
android:layout_width="fill_parent"
android:layout_height="65sp"
android:layout_alignParentBottom="true"
android:visibility="gone"
></GridView>
<LinearLayout
android:id="@+id/ll_search"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_above="@+id/gv_button_menu"
android:visibility="gone"
>
<EditText
android:id="@+id/et_search"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Enter the name or phone"
android:textSize="18sp"
></EditText>
</LinearLayout>
</RelativeLayout>
3.2 addnew.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"
>
<ScrollView
android:layout_weight="4"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:scrollbars="vertical"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal">
<ImageButton
android:id="@+id/btn_img"
android:layout_width="60px"
android:layout_height="60px"
android:src="@drawable/icon"
></ImageButton>
<EditText
android:id="@+id/et_name"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:gravity="top"
android:layout_gravity="center_vertical"
android:hint="姓名"
></EditText>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="手机"
android:textSize="20dp"
></TextView>
<EditText
android:id="@+id/et_mobilephone"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="手机"
android:phoneNumber="true"
></EditText>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="办公室电话"
android:textSize="20dp"
></TextView>
<EditText
android:id="@+id/et_officephone"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="办公室电话"
android:phoneNumber="true"
></EditText>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="家庭电话"
android:textSize="20dp"
></TextView>
<EditText
android:id="@+id/et_familyphone"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="家庭电话"
android:phoneNumber="true"
></EditText>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="职务职称"
android:textSize="20dp"
></TextView>
<EditText
android:id="@+id/et_position"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="职务职称"
></EditText>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="单位名称"
android:textSize="20dp"
></TextView>
<EditText
android:id="@+id/et_company"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="单位名称"
></EditText>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="地址"
android:textSize="20dp"
></TextView>
<EditText
android:id="@+id/et_address"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="地址"
></EditText>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="邮政编码"
android:textSize="20dp"
></TextView>
<EditText
android:id="@+id/et_zipcode"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="邮政编码"
android:phoneNumber="true"
></EditText>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Email"
android:textSize="20dp"
></TextView>
<EditText
android:id="@+id/et_email"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="Email"
></EditText>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="其他联系方式"
android:textSize="20dp"
></TextView>
<EditText
android:id="@+id/et_other"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="其他联系方式"
></EditText>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="备注"
android:textSize="20dp"
></TextView>
<EditText
android:id="@+id/et_remark"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="备注"
></EditText>
</LinearLayout>
</LinearLayout>
</ScrollView>
<LinearLayout
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
<Button
android:id="@+id/btn_save"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="保存"
></Button>
<Button
android:id="@+id/btn_return"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="返回"
></Button>
</LinearLayout>
</LinearLayout>
3.3 detail.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"
>
<ScrollView
android:layout_weight="4"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:scrollbars="vertical"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:orientation="horizontal">
<ImageButton
android:id="@+id/btn_img"
android:layout_width="60px"
android:layout_height="60px"
android:src="@drawable/icon"
></ImageButton>
<EditText
android:id="@+id/et_name"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:gravity="top"
android:layout_gravity="center_vertical"
android:hint="姓名"
></EditText>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="手机"
android:textSize="20dp"
></TextView>
<EditText
android:id="@+id/et_mobilephone"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="手机"
android:phoneNumber="true"
></EditText>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="办公室电话"
android:textSize="20dp"
></TextView>
<EditText
android:id="@+id/et_officephone"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="办公室电话"
android:phoneNumber="true"
></EditText>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="家庭电话"
android:textSize="20dp"
></TextView>
<EditText
android:id="@+id/et_familyphone"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="家庭电话"
android:phoneNumber="true"
></EditText>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="职务职称"
android:textSize="20dp"
></TextView>
<EditText
android:id="@+id/et_position"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="职务职称"
></EditText>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="单位名称"
android:textSize="20dp"
></TextView>
<EditText
android:id="@+id/et_company"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="单位名称"
></EditText>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="地址"
android:textSize="20dp"
></TextView>
<EditText
android:id="@+id/et_address"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="地址"
></EditText>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="邮政编码"
android:textSize="20dp"
></TextView>
<EditText
android:id="@+id/et_zipcode"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="邮政编码"
android:phoneNumber="true"
></EditText>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Email"
android:textSize="20dp"
></TextView>
<EditText
android:id="@+id/et_email"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="Email"
></EditText>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="其他联系方式"
android:textSize="20dp"
></TextView>
<EditText
android:id="@+id/et_other"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="其他联系方式"
></EditText>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="备注"
android:textSize="20dp"
></TextView>
<EditText
android:id="@+id/et_remark"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="top"
android:hint="备注"
></EditText>
</LinearLayout>
</LinearLayout>
</ScrollView>
<LinearLayout
android:layout_weight="1"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
>
<Button
android:id="@+id/btn_modify"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="修改"
></Button>
<Button
android:id="@+id/btn_delete"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="删除"
></Button>
<Button
android:id="@+id/btn_return"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="返回"
></Button>
</LinearLayout>
</LinearLayout>
3.4 imageswitch.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Gallery android:id="@+id/img_gallery"
android:layout_width="fill_parent"
android:layout_height="110px"
android:layout_marginTop="10px"
android:layout_alignParentLeft="true"></Gallery>
<ImageSwitcher android:id="@+id/image_switcher"
android:layout_width="90px"
android:layout_height="90px"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_alignBottom="@+id/img_gallery"></ImageSwitcher>
</RelativeLayout>
3.5 item_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="5dip"
>
<ImageView
android:id="@+id/item_image"
android:layout_centerHorizontal="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
></ImageView>
<TextView
android:id="@+id/item_text"
android:layout_below="@+id/item_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
></TextView>
</RelativeLayout>
3.6 list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<ImageView
android:id="@+id/user_image"
android:layout_width="50px"
android:layout_height="50px"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
></ImageView>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="50px"
android:orientation="vertical"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_toRightOf="@+id/user_image"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="25px"
android:orientation="horizontal"
>
<TextView
android:id="@+id/tv_showname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="姓名:"
android:textSize="17sp"
android:gravity="top"
></TextView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="7"
android:textSize="17sp"
android:gravity="left"
></TextView>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="25px"
android:orientation="horizontal"
>
<TextView
android:id="@+id/tv_showmobilephone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="手机:"
android:textSize="17sp"
android:gravity="top"
></TextView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="7"
android:textSize="17sp"
android:gravity="left"
></TextView>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
4、每个XML对应的界面是
4.1 main.xml
4.2 addnew.xml
4.3 detail.xml
4.4 imageswitch.xml
4.5 item_menu.xml
4.6 list_item.xml
5、在AndroidManifest.xml里的内容
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="test.contact"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".AddNewActivity"
android:label="@string/app_name">
</activity>
<activity android:name=".DetailActivity"
android:label="@string/app_name">
</activity>
<activity android:name=".MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>