首页 > 安全资讯 >

Android 个人通讯录【安卓进化十四】

11-11-08

最近写数据库,我就自己写了个带密码的个人通讯录,感觉sqlite特别好用,和mysql,sqlserver都一样,真是简单的关系型数据库,注意:开启数据库,cursor后一定要记得关闭close()掉,避免浪费资源。另外adapter...

 

最近写数据库,我就自己写了个带密码的个人通讯录,感觉sqlite特别好用,和mysql,sqlserver都一样,真是简单的关系型数据库,注意:开启数据库,cursor后一定要记得关闭close()掉,避免浪费资源。另外adapter的notifyDataSetChanged()这个方法也特别好用,就是数据库更新的时候,调用一下,baseAdapter中的getview就会重新加载一遍,这样界面就会更新数据,而不用onCreate()方法来更新,另外可以把notifyDataSetChanged()方法写在onResume()方法中,这样在两个activity跳转后按back 键也可以达到刷新界面的效果!

想要源码的可以留言,有问题可以留言,同时也欢迎指正我的纰漏;

转载请标明出处:http://blog.csdn.net/wdaming1986/article/details/6727032

另:csdn下载连接地址:http://download.csdn.net/source/3555843

     

                程序启动后输入密码的界面:                                      第一次启动程序和点击修改密码界面:

 

 


                                                                 

 

                      点击确定,进入联系人列表界面:                                     点击menu菜单,有两个菜单键:

                                                               

 

                   单击每一个列表进入修改界面:                                    长按每一个联系人弹dialog删除记录:

                                                               

 

 

下面看代码:

在com.cn.daming包下的类:

1、Login.java 程序的入口类

 

package com.cn.daming; 

 

import android.app.Activity; 

import android.content.Intent; 

import android.os.Bundle; 

import android.view.View; 

import android.widget.Button; 

import android.widget.EditText; 

import android.widget.Toast; 

 

import com.cn.daming.databases.DBOpenHelper; 

 

public class Login extends Activity { 

 

    private DBOpenHelper db; 

    private EditText et; 

    private Button login_button; 

    private String password; 

     

    @Override 

    protected void onCreate(Bundle bundle) { 

        super.onCreate(bundle); 

         

        db = new DBOpenHelper(this); 

        password = db.getPwd(); 

        db.close(); 

        if(password.equals("")){ 

            Intent intent = new Intent(Login.this,PasswordManage.class); 

            startActivity(intent); 

            finish(); 

            return; 

        } 

        setContentView(R.layout.login); 

         

        et = (EditText)findViewById(R.id.login_password); 

        login_button = (Button)findViewById(R.id.note_login); 

         

        login_button.setOnClickListener(new Button.OnClickListener(){ 

     

            public void onClick(View v) { 

                String input_pwd = et.getText().toString(); 

                if(password.equals(input_pwd)){ 

                    Toast.makeText(Login.this, R.string.login_success, Toast.LENGTH_LONG).show(); 

                    Intent intent = new Intent(Login.this,MainActivity.class); 

                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

                    startActivity(intent); 

                    finish(); 

                }else{ 

                    Toast.makeText(Login.this, R.string.error_password, Toast.LENGTH_LONG).show(); 

                    et.setText(""); 

                } 

            } 

             

        }); 

    } 

}  

 

2、MainActivity.java类:程序listView列表显示类

 

package com.cn.daming; 

 

import java.util.ArrayList; 

import java.util.List; 

 

import android.app.Activity; 

import android.app.AlertDialog; 

import android.content.DialogInterface; 

import android.content.Intent; 

import android.database.Cursor; 

import android.os.Bundle; 

import android.view.Menu; 

import android.view.MenuItem; 

import android.view.View; 

import android.widget.AdapterView; 

import android.widget.AdapterView.OnItemClickListener; 

import android.widget.AdapterView.OnItemLongClickListener; 

import android.widget.ListView; 

import android.widget.Toast; 

 

import com.cn.daming.adapter.ContantsAdapter; 

import com.cn.daming.databases.DBOpenHelper; 

 

public class MainActivity extends Activity { 

 

    private DBOpenHelper dbOpenHelper; 

    private ContantsAdapter contantsAdapter; 

    private ListView dbListView; 

    private Cursor cursor; 

     

    final int MENU_ADD = Menu.FIRST; 

    final int MENU_CHANGE = Menu.FIRST+1; 

     

    private List<String> ids; 

    private List<String> names; 

    private List<String> phones; 

    AlertDialog dialog; 

    @Override 

    public void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState); 

        setContentView(R.layout.main); 

        dbOpenHelper = new DBOpenHelper(this); 

        dbListView = (ListView)findViewById(R.id.db_listview); 

        refreshDBOpenHelper(); 

 

        dbListView.setOnItemClickListener(new OnItemClickListener(){ 

 

            public void onItemClick(AdapterView<?> arg0, View arg1, int position, 

                    long arg3) { 

                Intent intent= new Intent(); 

                intent.putExtra("cmd", 0);   

                String contants_id = ids.get(position);//0代表查询联系人,1代表添加联系人 

                intent.putExtra("id", contants_id); 

                intent.setClass(MainActivity.this, DetailContantsActivity.class); 

                startActivity(intent); 

            } 

        }); 

         

        dbListView.setOnItemLongClickListener(new OnItemLongClickListener(){ 

 

            public boolean onItemLongClick(AdapterView<?> arg0, View arg1, 

                    final int position, long arg3) { 

                dialog = new AlertDialog.Builder(MainActivity.this) 

                .setTitle("提示!!") 

                .setMessage("确定要删除这条记录?") 

                .setPositiveButton("确定", 

                 new DialogInterface.OnClickListener() 

                 { 

                     public void onClick(DialogInterface dialog, int whichButton) 

                     { 

                         String contants_id = ids.get(position); 

                         dbOpenHelper.deleteContants(contants_id); 

                         dbOpenHelper.close(); 

                         Toast.makeText(MainActivity.this, "正在删除数据库,请稍后。。。", Toast.LENGTH_LONG).show(); 

                         refreshDBOpenHelper(); 

                         contantsAdapter.notifyDataSetChanged(); 

                     } 

                     }) 

                 .setNegativeButton("取消",new DialogInterface.OnClickListener() 

                 { 

                      public void onClick(DialogInterface dialog, int whichButton) 

                      { 

                         dialog.dismiss(); 

                      } 

                  }).show(); 

                return false; 

            } 

        }); 

    } 

     

    @Override 

    protected void onResume() { 

        refreshDBOpenHelper();   

        contantsAdapter.notifyDataSetChanged(); 

        super.onResume(); 

    } 

 

    public void refreshDBOpenHelper(){ 

        cursor = dbOpenHelper.selectContants(); 

        ids = new ArrayList<String>(); 

        names = new ArrayList<String>(); 

        phones = new ArrayList<String>(); 

         

        int count = cursor.getCount(); 

        if(count>0){ 

            for(int i=0;i<count;i++){ 

                cursor.moveToPosition(i); 

                ids.add(cursor.getString(0)); 

                names.add(cursor.getString(1)); 

                phones.add(cursor.getString(2)); 

            } 

        }else{ 

            Toast.makeText(this, R.string.not_dbcursor_values, Toast.LENGTH_SHORT).show(); 

        } 

        contantsAdapter = new ContantsAdapter(this,names,phones); 

        dbListView.setAdapter(contantsAdapter); 

        cursor.close(); 

        dbOpenHelper.close(); 

    } 

     

    @Override 

    public boolean onCreateOptionsMenu(Menu menu) { 

        menu.add(0, MENU_ADD, 0, R.string.menu_add) 

            .setIcon(R.drawable.add);   //add - add_button  

        menu.add(0, MENU_CHANGE, 0, R.string.menu_change) 

            .setIcon(R.drawable.modify);        //add -add_change_password 

        return super.onCreateOptionsMenu(menu); 

    } 

    @Override 

    public boolean onOptionsItemSelected(MenuItem item) { 

        switch(item.getItemId()){       // 

        case MENU_ADD:          //press change add button 

            Intent add_intent= new Intent(this,DetailContantsActivity.class); 

            add_intent.putExtra("cmd", 1); 

            startActivity(add_intent); 

            break; 

        case MENU_CHANGE:   //press change password button 

            Intent change_password_intent = new Intent(MainActivity.this,PasswordManage.class); 

            startActivityForResult(change_password_intent,0); 

            break; 

        } 

        return super.onOptionsItemSelected(item); 

    } 

 

3、PasswordManage.java,密码设置类:

 

package com.cn.daming; 

 

import com.cn.daming.databases.DBOpenHelper; 

 

import android.app.Activity; 

import android.content.Intent; 

import android.os.Bundle; 

import android.view.View; 

import android.widget.Button; 

import android.widget.EditText; 

import android.widget.Toast; 

 

public class PasswordManage extends Activity { 

     

    private EditText et1; 

    private EditText et2; 

    private Button button; 

    private DBOpenHelper db; 

    private int CHANGE_PWD_SUCCESS = 100; 

     

    public void onCreate(Bundle bundle){ 

        super.onCreate(bundle); 

        db = new DBOpenHelper(this); 

        setContentView(R.layout.password_manage); 

         

        et1 = (EditText)findViewById(R.id.new_password); 

        et2 = (EditText)findViewById(R.id.repeat_password); 

        button = (Button)findViewById(R.id.save_password); 

         

        button.setOnClickListener(new Button.OnClickListener(){ 

 

            public void onClick(View v) { 

                String new_pwd = et1.getText().toString(); 

                String repeat_pwd = et2.getText().toString(); 

                if(new_pwd==null||new_pwd.equals("")){ 

                    Toast.makeText(PasswordManage.this, R.string.password_is_null, Toast.LENGTH_LONG).show(); 

                }else{ 

                    if(new_pwd.equals(repeat_pwd)){ 

                        if(db.getPwd().equals("")){ 

                            db.insertPwd(new_pwd); 

                            Toast.makeText(PasswordManage.this, R.string.password_set_success, Toast.LENGTH_LONG).show(); 

                            toNoteList(); 

                        }else{ 

                            db.updatePwd(new_pwd); 

                            Toast.makeText(PasswordManage.this, R.string.password_change_success, Toast.LENGTH_LONG).show(); 

                            PasswordManage.this.setResult(CHANGE_PWD_SUCCESS); 

                            PasswordManage.this.finish(); 

                        } 

                    }else{ 

                        Toast.makeText(PasswordManage.this, R.string.password_isnot_equal, Toast.LENGTH_LONG).show(); 

                    } 

                } 

            } 

        }); 

    } 

     

    public void toNoteList(){ 

        Toast.makeText(PasswordManage.this, R.string.password_set_success, Toast.LENGTH_LONG); 

        Intent intent = new Intent(PasswordManage.this,MainActivity.class); 

        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

        startActivity(intent); 

        finish(); 

    } 

 

 

4、DetailContantsActivity。java类,每一条记录,联系人的类:

 

 

package com.cn.daming; 

 

import android.app.Activity; 

import android.content.ContentValues; 

import android.content.Intent; 

import android.database.Cursor; 

import android.database.sqlite.SQLiteDatabase; 

import android.os.Bundle; 

import android.view.View; 

import android.view.View.OnClickListener; 

import android.widget.EditText; 

import android.widget.ImageButton; 

import android.widget.Toast; 

 

import com.cn.daming.databases.DBOpenHelper; 

 

public class DetailContantsActivity extends Activity{ 

 

 Cursor cursor; 

 DBOpenHelper dbOpenHelper; 

 int id = -1;      

 int [] textIds ={ 

  R.id.etName, 

  R.id.etPhone, 

  R.id.etMobile, 

  R.id.etEmail, 

  R.id.etPost, 

  R.id.etAddr, 

  R.id.etComp 

 }; 

 EditText [] textArray; 

 ImageButton saveButton; //save Button 

 int status = -1; //0表示查看信息,1表示添加联系人,2表示修改联系人 

  

 @Override 

 protected void onCreate(Bundle savedInstanceState) { 

  super.onCreate(savedInstanceState); 

  setContentView(R.layout.contants_detail); 

  textArray = new EditText[textIds.length]; 

  for(int i=0;i<textIds.length;i++){ 

   textArray[i] = (EditText)findViewById(textIds[i]); 

  } 

  initSaveImageButton(); 

  dbOpenHelper = new DBOpenHelper(this); 

  Intent intent = getIntent(); 

  status = intent.getExtras().getInt("cmd");  

  switch(status){ 

  case 0:    

   String contants_id = intent.getExtras().getString("id");   

   cursor = dbOpenHelper.getContants(contants_id); 

   int count = cursor.getCount(); 

   if(count == 0){    

    Toast.makeText(this, "对不起,没有找到指定的联系人!", Toast.LENGTH_LONG).show(); 

   } 

   else{      

    cursor.moveToFirst();     

    textArray[0].setText(cursor.getString(1));   //设置姓名框中的内容 

    textArray[1].setText(cursor.getString(2));   //设置固话框中的内容 

    textArray[2].setText(cursor.getString(3));   //设置手机号码框中的内容 

    textArray[3].setText(cursor.getString(4));   //设置电子邮件框中的内容 

    textArray[4].setText(cursor.getString(5));   //设置电子邮件框中的内容 

    textArray[5].setText(cursor.getString(6));   //设置电子邮件框中的内容 

    textArray[6].setText(cursor.getString(7));   //设置电子邮件框中的内容 

   } 

   cursor.close(); 

   dbOpenHelper.close(); 

   break; 

  case 1:     //新建详细人信息 

   for(EditText et:textArray){ 

    et.getEditableText().clear();  //清空各个EditText控件中内容 

   } 

   break; 

  } 

 } 

  

 public void initSaveImageButton() 

 { 

  saveButton = (ImageButton)findViewById(R.id.detailSave); 

  saveButton.setOnClickListener(new OnClickListener(){ 

 

   public void onClick(View arg0) { 

    String [] strArray = new String[textArray.length]; 

    for(int i=0;i<strArray.length;i++){ 

     strArray[i] = textArray[i].getText().toString().trim(); //获得用户输入的信息数组 

    } 

    if(strArray[0].equals("") || strArray[1].equals("")){ 

     Toast.makeText(DetailContantsActivity.this, "对不起,请将姓名和电话填写完整!", Toast.LENGTH_LONG).show(); 

    }else{ 

     switch(status){  //判断当前的状态 

     case 0:    //查询联系人详细信息时按下保存 

      updateContact(strArray);  //更新联系人信息 

      break; 

     case 1:    //新建联系人时按下保存按钮 

      insertContact(strArray);  //插入联系人信息 

      break; 

     }    

    } 

   } 

  }); 

 } 

  

 public void insertContact(String [] strArray){ 

  long count = dbOpenHelper.insertContants(strArray);  //插入数据 

  dbOpenHelper.close(); 

  if(count == -1){ 

   Toast.makeText(this, "添加联系人失败!", Toast.LENGTH_LONG).show(); 

  } 

  else{ 

   Toast.makeText(this, "添加联系人成功!", Toast.LENGTH_LONG).show(); 

  } 

 } 

  

 public void updateContact(String [] strArray){ 

  int count = dbOpenHelper.updateContants(id+"", strArray); //更新数据库 

  dbOpenHelper.close(); 

  if(count == 1){ 

   Toast.makeText(this, "修改联系人成功!", Toast.LENGTH_LONG).show(); 

  } 

  else{ 

   Toast.makeText(this, "修改联系人失败!", Toast.LENGTH_LONG).show(); 

  } 

 } 

 

在com.cn.daming.databases包下面的类:

5、DBOpenHelper。java,数据库的类:

 

package com.cn.daming.databases; 

 

import android.content.ContentValues; 

import android.content.Context; 

import android.database.Cursor; 

import android.database.sqlite.SQLiteDatabase; 

import android.database.sqlite.SQLiteOpenHelper; 

 

public class DBOpenHelper extends SQLiteOpenHelper{ 

 

    private final static String DATABASE_NAME = "personal_contacts"; 

    private final static int DATABASE_VERSION = 1; 

    private final static String TABLE_NAME = "contants"; 

    public static final String ID="_id";       //ID 

    public static final String NAME="name";    //名称 

    public static final String PHONE="phone";  //固定电话 

    public static final String MOBILE="mobile";//手机号码 

    public static final String EMAIL="email";  //电子邮件地址 

    public static final String POST="post";    //邮政编码 

    public static final String ADDR="addr";    //通信地址 

    public static final String COMP="comp";    //公司 

     

    public final static String LOGIN_TABLE_NAME = "contantslogin"; 

    public final static String LOGIN_USER = "admin"; 

    public final static String LOGIN_PWD = "password"; 

     

    public DBOpenHelper(Context context) { 

        super(context, DATABASE_NAME, null, DATABASE_VERSION); 

    } 

 

    @Override 

    public void onCreate(SQLiteDatabase db) { 

        String sql = "create table "+TABLE_NAME+" (" 

        + ID + " integer primary key autoincrement," 

        + NAME + " varchar," 

        + PHONE+" varchar," 

        + MOBILE + " varchar," 

        + EMAIL + " varchar," 

        + POST + " varchar," 

        + ADDR + " varchar," 

        + COMP + " varchar)"; 

        db.execSQL(sql); 

         

        sql = "create table "+LOGIN_TABLE_NAME+" (" 

        +LOGIN_USER+" text, " 

        +LOGIN_PWD+" text )"; 

        db.execSQL(sql);          

    } 

 

    @Override 

    public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) { 

        String sql = "drop table if exists "+TABLE_NAME; 

        db.execSQL(sql); 

 

        sql = "drop table if exists "+LOGIN_TABLE_NAME; 

        db.execSQL(sql); 

        onCreate(db);        

    } 

 

    public Cursor selectContants(){ 

        SQLiteDatabase db = this.getReadableDatabase(); 

        Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null); 

        return cursor; 

    } 

     

    public long insertContants(String[] strArray){ 

        SQLiteDatabase db = this.getWritableDatabase(); 

        ContentValues cv = new ContentValues(); 

        cv.put(NAME, strArray[0]); 

        cv.put(PHONE, strArray[1]); 

        cv.put(MOBILE, strArray[2]); 

        cv.put(EMAIL, strArray[3]);  

        cv.put(POST, strArray[4]); 

        cv.put(ADDR, strArray[5]); 

        cv.put(COMP, strArray[6]); 

        return db.insert(TABLE_NAME, null, cv); 

    } 

     

    public void deleteContants(String id){ 

        SQLiteDatabase db = this.getWritableDatabase(); 

        String where = ID+"=?"; 

        String[] whereValues = {id}; 

        db.delete(TABLE_NAME, where, whereValues); 

    } 

     

    public int updateContants(String id,String[] strArray){ 

        SQLiteDatabase db = this.getWritableDatabase(); 

        String where = ID+"=?"; 

        String[] whereValues = {id}; 

        ContentValues cv = new ContentValues(); 

        cv.put(NAME, strArray[0]); 

        cv.put(PHONE, strArray[1]); 

        cv.put(MOBILE, strArray[2]); 

        cv.put(EMAIL, strArray[3]);  

        cv.put(POST, strArray[4]); 

        cv.put(ADDR, strArray[5]); 

        cv.put(COMP, strArray[6]); 

        return db.update(TABLE_NAME, cv, where, whereValues); 

    } 

     

    public Cursor getContants(String id){ 

        SQLiteDatabase db = this.getReadableDatabase(); 

        String where = ID+"=?"; 

        String[] whereValues = {id}; 

        Cursor cursor = db.query(TABLE_NAME, null, where, whereValues, null, null, null); 

        return cursor; 

    } 

     

    public long insertPwd(String password){ 

        SQLiteDatabase db = this.getWritableDatabase(); 

        ContentValues cv = new ContentValues(); 

        cv.put(LOGIN_USER, LOGIN_USER); 

        cv.put(LOGIN_PWD, password); 

        return db.insert(LOGIN_TABLE_NAME, null, cv); 

    } 

     

    public int updatePwd(String password){ 

        SQLiteDatabase db = this.getWritableDatabase(); 

        String where = LOGIN_USER+"=?"; 

        String[] whereValues = {LOGIN_USER}; 

        ContentValues cv = new ContentValues(); 

        cv.put(LOGIN_PWD, password); 

        return db.update(LOGIN_TABLE_NAME, cv, where, whereValues); 

    } 

 

    public String getPwd(){ 

        SQLiteDatabase db = this.getReadableDatabase(); 

        String where = LOGIN_USER+"=?"; 

        String[] whereValues = {LOGIN_USER};   

        Cursor cursor = db.query(LOGIN_TABLE_NAME, null, where, whereValues, null, null, null); 

        if(cursor.moveToFirst()){ 

            return cursor.getString(cursor.getColumnIndex(LOGIN_PWD)); 

        }else{ 

            return ""; 

        } 

    } 

 

在com.cn.daming.adapter包下的类:

6、ContantsAdapter。java,适配器类:

 

package com.cn.daming.adapter; 

 

import java.util.List; 

 

import android.content.Context; 

import android.view.LayoutInflater; 

import android.view.View; 

import android.view.ViewGroup; 

import android.widget.BaseAdapter; 

import android.widget.TextView; 

 

import com.cn.daming.R; 

 

public class ContantsAdapter extends BaseAdapter { 

 

    private List<String> names; 

    private List<String> phones; 

    private LayoutInflater inflater; 

    private Context context; 

     

    public ContantsAdapter(Context context,List<String> names ,List<String> phones){ 

        inflater = LayoutInflater.from(context); 

        this.names = names; 

        this.phones = phones; 

        this.context = context; 

    } 

     

    public int getCount() { 

        return names.size(); 

    } 

 

    public Object getItem(int position) { 

        return names.get(position); 

    } 

 

    public long getItemId(int position) { 

        return position; 

    } 

 

    public View getView(int position, View view, ViewGroup group) { 

        ContantsHolder holder = new ContantsHolder(); 

        if(view==null){ 

            view = inflater.inflate(R.layout.contants_list_view, null); 

            holder.contansName = (TextView)view.findViewById(R.id.name_textview); 

            holder.contantsPhone = (TextView)view.findViewById(R.id.phone_textview); 

            view.setTag(holder);  

        }else{ 

            holder = (ContantsHolder)view.getTag(); 

        } 

        holder.contansName.setText(names.get(position)); 

        holder.contantsPhone.setText(phones.get(position)); 

        return view; 

    } 

 

    public class ContantsHolder 

    { 

        private TextView contansName; 

        private TextView contantsPhone; 

    } 

 

布局文件

1、login。xml布局文件:

 

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout 

  xmlns:android="http://schemas.android.com/apk/res/android" 

  android:layout_width="fill_parent" 

  android:layout_height="fill_parent" 

  android:paddingTop="10dip" 

  android:orientation="vertical" 

  android:background="@drawable/background" 

>  

 

<TextView 

  android:layout_width="wrap_content" 

  android:layout_height="wrap_content" 

  android:text="@string/please_input_password" 

  android:textSize="24dip" 

  android:textStyle="bold" 

  android:textColor="@drawable/black" 

  android:layout_gravity="center" 

/> 

 

<EditText 

  android:id="@+id/login_password" 

  android:layout_width="250dip" 

  android:layout_height="wrap_content" 

  android:password="true" 

  android:layout_gravity="center" 

  android:layout_marginTop="15dip"  

/> 

 

<LinearLayout 

  android:layout_width="wrap_content" 

  android:layout_height="wrap_content" 

  android:layout_gravity="center" 

  android:layout_marginTop="15dip" 

<Button 

  android:id="@+id/note_login" 

  android:layout_width="100dip" 

  android:layout_height="wrap_content" 

  android:text="@string/ok" 

/> 

 

</LinearLayout> 

 

</LinearLayout> 

2、contants_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="wrap_content" 

    android:background="@drawable/background" 

    > 

    <LinearLayout 

        xmlns:android="http://schemas.android.com/apk/res/android" 

        android:orientation="horizontal" 

        android:layout_width="fill_parent" 

        android:layout_height="wrap_content" 

        android:layout_gravity="center_horizontal" 

        >                            <!-- 显示联系人姓名线性布局--> 

        <TextView 

            android:layout_width="100px" 

            android:layout_height="wrap_content" 

            android:textSize="18px" 

            android:textColor="@color/text"  

            android:layout_gravity="left|center_vertical" 

            android:text="@string/contantsName" 

            /> 

        <EditText 

            android:id="@+id/etName" 

            android:layout_width="fill_parent" 

            android:layout_height="wrap_content" 

            /> 

        </LinearLayout> 

    <LinearLayout 

        xmlns:android="http://schemas.android.com/apk/res/android" 

        android:orientation="horizontal" 

        android:layout_width="fill_parent" 

        android:layout_height="wrap_content" 

        >                            <!-- 显示联系人固定电话的线性布局--> 

        <TextView 

            android:layout_width="100px" 

            android:layout_height="wrap_content" 

            android:textSize="18px"  

            android:textColor="@color/text" 

            android:layout_gravity="center_vertical|left" 

            android:text="@string/contantsPhone" 

            /> 

        <EditText 

            android:id="@+id/etPhone" 

            android:layout_width="fill_parent" 

            android:layout_height="wrap_content" 

            android:phoneNumber="true" 

            /> 

        </LinearLayout> 

    <LinearLayout 

        xmlns:android="http://schemas.android.com/apk/res/android" 

        android:orientation="horizontal" 

        android:layout_width="fill_parent" 

        android:layout_height="wrap_content" 

        >                                        <!-- 显示联系人手机号码的线性布局--> 

        <TextView 

            android:layout_width="100px" 

            android:layout_height="wrap_content" 

            android:textSize="18px" 

            android:textColor="@color/text" 

            android:layout_gravity="left|center_vertical" 

            android:text="@string/contantsMobile" 

            /> 

        <EditText 

            android:id="@+id/etMobile" 

            android:layout_width="fill_parent" 

            android:layout_height="wrap_content" 

            android:phoneNumber="true" 

            /> 

        </LinearLayout> 

    <LinearLayout 

        xmlns:android="http://schemas.android.com/apk/res/android" 

        android:orientation="horizontal" 

        android:layout_width="fill_parent" 

        android:layout_height="wrap_content" 

        >                                        <!-- 显示联系人电子邮件的线性布局--> 

        <TextView 

            android:layout_width="100px" 

            android:layout_height="wrap_content" 

            android:textSize="18px" 

            android:textColor="@color/text" 

            android:layout_gravity="left|center_vertical" 

            android:text="@string/contantsEmail" 

            /> 

        <EditText 

            android:id="@+id/etEmail" 

            android:layout_width="fill_parent" 

            android:layout_height="wrap_content" 

            /> 

        </LinearLayout>  

    <LinearLayout 

        xmlns:android="http://schemas.android.com/apk/res/android" 

        android:orientation="horizontal" 

        android:layout_width="fill_parent" 

        android:layout_height="wrap_content" 

        >                                        <!-- 显示联系人邮编的线性布局--> 

        <TextView 

            android:layout_width="100px" 

            android:layout_height="wrap_content" 

            android:textSize="18px" 

            android:textColor="@color/text" 

            android:layout_gravity="left|center_vertical" 

            android:text="@string/contantsPost" 

            /> 

        <EditText 

            android:id="@+id/etPost" 

            android:layout_width="fill_parent" 

            android:layout_height="wrap_content" 

            /> 

        </LinearLayout>   

    <LinearLayout 

        xmlns:android="http://schemas.android.com/apk/res/android" 

        android:orientation="horizontal" 

        android:layout_width="fill_parent" 

        android:layout_height="wrap_content" 

        >                                        <!-- 显示联系人通信地址的线性布局--> 

        <TextView 

            android:layout_width="100px" 

            android:layout_height="wrap_content" 

            android:textSize="18px" 

            android:textColor="@color/text" 

            android:layout_gravity="left|center_vertical"  

            android:text="@string/contantsAddr" 

            /> 

        <EditText 

            android:id="@+id/etAddr" 

            android:layout_width="fill_parent" 

            android:layout_height="wrap_content" 

            /> 

        </LinearLayout> 

    <LinearLayout 

        xmlns:android="http://schemas.android.com/apk/res/android" 

        android:orientation="horizontal" 

        android:layout_width="fill_parent" 

        android:layout_height="wrap_content" 

        >                                        <!-- 显示联系人公司的线性布局--> 

        <TextView 

            android:layout_width="100px" 

            android:layout_height="wrap_content" 

            android:textSize="18px" 

            android:textColor="@color/text" 

            android:layout_gravity="left|center_vertical" 

            android:text="@string/contantsComp" 

            /> 

        <EditText 

            android:id="@+id/etComp" 

            android:layout_width="fill_parent" 

            android:layout_height="wrap_content" 

            /> 

        </LinearLayout> 

    <ImageButton 

        android:id="@+id/detailSave" 

        android:layout_width="fill_parent" 

        android:layout_height="wrap_content" 

        android:src="@drawable/save" 

        /> 

</LinearLayout> 

 

3、contants_list_view.xml,每一个list的item布局文件

 

<?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="horizontal"> 

  <TextView 

      android:id="@+id/name_textview" 

      android:layout_width="150dip" 

      android:layout_height="wrap_content" 

      android:layout_marginRight="10dip" 

      android:textColor="#000000" 

      android:textSize="10pt" 

  /> 

  <TextView 

      android:id="@+id/phone_textview" 

      android:layout_width="165dip" 

      android:layout_height="wrap_content" 

      android:textColor="#000000" 

      android:textSize="10pt" 

  /> 

</LinearLayout> 

 

4、main.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" 

    android:background="@drawable/background" 

    > 

    <LinearLayout 

        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:layout_gravity="center_horizontal" 

            android:text="@string/title" 

            android:textSize="24px" 

            android:textColor="@color/text" 

            /> 

        <ImageView 

            android:layout_width="wrap_content" 

            android:layout_height="wrap_content" 

            android:src="@drawable/title" 

            /> 

        </LinearLayout> 

        <ListView     

            android:id="@+id/db_listview" 

            android:layout_width="fill_parent" 

            android:layout_height="fill_parent" 

            android:choiceMode="singleChoice" 

            />  

</LinearLayout> 

 

5、password_manage.xml布局文件

 

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout 

  xmlns:android="http://schemas.android.com/apk/res/android" 

  android:layout_width="fill_parent" 

  android:layout_height="wrap_content" 

  android:orientation="vertical"  

  android:background="@drawable/background"  

   

<TextView 

  android:layout_width="wrap_content" 

  android:layout_height="wrap_content" 

  android:layout_gravity="center" 

  android:textStyle="bold" 

  android:textSize="26dip" 

  android:padding="6dip" 

  android:paddingBottom="10dip" 

  android:textColor="@drawable/black" 

  android:text="@string/password_manage" 

/> 

 

<TableLayout 

  android:layout_width="fill_parent" 

  android:layout_height="wrap_content" 

  android:layout_marginTop="20dip" 

  android:layout_marginLeft="10dip" 

<TableRow 

  android:layout_width="fill_parent" 

  android:layout_height="50dip" 

<TextView 

  android:layout_width="wrap_content" 

  android:layout_height="fill_parent" 

  android:text="@string/new_password" 

  android:layout_gravity="right" 

  android:gravity="center" 

  android:textColor="#000000" 

  android:textSize="11pt" 

/> 

<EditText 

  android:id="@+id/new_password" 

  android:layout_width="180dip" 

  android:layout_height="wrap_content"   

  android:password="true" 

  android:layout_marginLeft="20dip" 

/> 

</TableRow> 

 

<TableRow 

  android:layout_width="fill_parent" 

  android:layout_height="50dip" 

  android:layout_marginTop="10dip" 

  android:gravity="center_vertical" 

   

<TextView 

  android:layout_width="wrap_content" 

  android:layout_height="fill_parent" 

  android:text="@string/repeat_password" 

  android:layout_gravity="right" 

  android:gravity="center_vertical" 

  android:textColor="#000000" 

  android:textSize="11pt" 

/> 

<EditText 

  android:id="@+id/repeat_password" 

  android:layout_width="180dip" 

  android:layout_height="wrap_content"   

  android:password="true" 

  android:layout_marginLeft="20dip" 

/> 

</TableRow> 

 

</TableLayout> 

 

<LinearLayout 

  android:layout_width="fill_parent" 

  android:layout_height="wrap_content" 

  android:gravity="center" 

  android:layout_marginTop="20dip" 

<Button 

  android:id="@+id/save_password" 

  android:layout_width="80dip" 

  android:layout_height="wrap_content" 

  android:text="@string/ok" 

  android:textSize="16dip" 

/> 

</LinearLayout> 

 

</LinearLayout> 

 

values下的文件

1、string。xml文件

 

<?xml version="1.0" encoding="utf-8"?> 

<resources> 

    <string name="hello">Hello World, MainActivity!</string> 

    <string name="app_name">ContantsApp</string> 

     

    <string name="please_input_password">请输入大明通讯录密码:</string> 

    <string name="ok">确定</string> 

     

    <string name="login_success">恭喜,登陆成功!</string> 

    <string name="error_password">您输入的密码错误,请重新输入!</string> 

     

    <string name="password_manage">大明通讯录密码管理:</string> 

    <string name="new_password">新密码:</string> 

    <string name="repeat_password">再一次:</string> 

     

    <string name="password_is_null">输入密码为空,请输入密码!</string> 

    <string name="password_set_success">密码设置成功!</string> 

    <string name="password_change_success">密码修改成功!</string> 

    <string name="password_isnot_equal">两次输入的密码不一致,请重新输入密码!</string> 

     

    <string name="title">大明通讯录列表</string> 

    <string name="not_dbcursor_values">数据库中没有记录,请点击菜单新建通讯录!</string> 

     

    <string name="contantsName">姓名:</string> 

    <string name="contantsPhone">固定电话:</string> 

    <string name="contantsMobile">移动电话:</string> 

    <string name="contantsEmail">电子邮件:</string> 

    <string name="contantsPost">邮政编码:</string> 

    <string name="contantsAddr">通讯地址:</string> 

    <string name="contantsComp">公司地址:</string> 

     

    <string name="menu_add">增加</string> 

    <string name="menu_change">修改密码</string> 

</resources> 

 

2、color。xml文件

 

<?xml version="1.0" encoding="utf-8"?> 

<resources> 

    <drawable name="white">#FFFFFF</drawable> 

    <drawable name="black">#FF000000</drawable> 

    <drawable name="dackgray">#666666</drawable> 

    <drawable name="red">#FFFF0000</drawable> 

    <drawable name="blue">#FF0000FF</drawable> 

    <drawable name="yellow">#FFFFFF00</drawable> 

    <drawable name="green">#FF00FF00</drawable> 

    <color name="text">#000000</color> 

    <drawable name="changshise">#FFD19275</drawable> 

</resources> 

 

AndroidManifest.xml:

 

 

<?xml version="1.0" encoding="utf-8"?> 

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 

      package="com.cn.daming" 

      android:versionCode="1" 

      android:versionName="1.0"> 

    <uses-sdk android:minSdkVersion="8" /> 

 

    <application android:icon="@drawable/icon" android:label="@string/app_name"> 

        <activity android:name=".Login" 

                  android:label="@string/app_name"> 

            <intent-filter> 

                <action android:name="android.intent.action.MAIN" /> 

                <category android:name="android.intent.category.LAUNCHER" /> 

            </intent-filter> 

        </activity>  www.2cto.com

        <activity android:name=".MainActivity"></activity> 

        <activity android:name=".PasswordManage"></activity> 

        <activity android:name=".DetailContantsActivity"></activity> 

    </application> 

</manifest>   

 




摘自 大明zeroson的android学习历程
相关文章
最新文章
热点推荐