1.总体设计
我的整体功能设计相对简单。一个主要的联系人显示界面,使用ListView将得到联系人数据进行显示,通过点击,长按联系人事件触发相应的弹窗(Dailog)然后选择想要的功能。通过点击加号图标进行添加联系人操作。
2.具体实现
1.类实现:
1.contacts类:
package com.example.contacts2;
import static android.content.ContentValues.TAG;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class contacts extends Activity implements AdapterView.OnItemClickListener, AdapterView.OnItemLongClickListener {
private ListView lv;
private MyAdapter adapter;
private GetNum getPhoneNumberFromMobile;
private List<PhoneInfo> list = new ArrayList<PhoneInfo>();
private Context context;
protected void onCreate(Bundle savedInstanceState) {
context=this;
permission();
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.contents_view);
getPhoneNumberFromMobile = new GetNum();
list = getPhoneNumberFromMobile.getPhoneNumberFromMobile(this);
adapter = new MyAdapter(list, this);
lv.setAdapter(adapter);
lv.setOnItemClickListener(this);
lv.setOnItemLongClickListener(this);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
PhoneInfo thislist = list.get(position);
Mydialog1 mydialog1 =new Mydialog1(this,thislist);
mydialog1.show();
}
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long l) {
Toast.makeText(this, "delete", Toast.LENGTH_LONG).show();
Mydialog3 mydialog3=new Mydialog3(this, list.get(position).getName(),list.get(position).getNumber());
mydialog3.show();
return true;
}
@Override
public void onBackPressed() { //清除缓存
list.clear();
super.onBackPressed();
return;
}
public void add(View view) {
Mydialog2 mydialog2=new Mydialog2(this);
mydialog2.show();
}
public Context getContext() {
return context;
}
public void setContext(Context context) {
this.context = context;
}
public void permission(){
//1.先请求判断是否具有对应权限
if(ContextCompat.checkSelfPermission
(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED)
//根据返回的结果,判断对应的权限是否有。
{
ActivityCompat.requestPermissions
(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
0);
}
if(ContextCompat.checkSelfPermission
(this, Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED)
//根据返回的结果,判断对应的权限是否有。
{
ActivityCompat.requestPermissions
(this,
new String[]{Manifest.permission.READ_CONTACTS},
0);
}
if(ContextCompat.checkSelfPermission
(this, Manifest.permission.WRITE_CONTACTS)
!= PackageManager.PERMISSION_GRANTED)
//根据返回的结果,判断对应的权限是否有。
{
ActivityCompat.requestPermissions
(this,
new String[]{Manifest.permission.WRITE_CONTACTS},
0);
}
if(ContextCompat.checkSelfPermission
(this, Manifest.permission.CALL_PHONE)
!= PackageManager.PERMISSION_GRANTED)
//根据返回的结果,判断对应的权限是否有。
{
ActivityCompat.requestPermissions
(this,
new String[]{Manifest.permission.CALL_PHONE},
0);
}
if(ContextCompat.checkSelfPermission
(this, Manifest.permission.SEND_SMS)
!= PackageManager.PERMISSION_GRANTED)
//根据返回的结果,判断对应的权限是否有。
{
ActivityCompat.requestPermissions
(this,
new String[]{Manifest.permission.SEND_SMS},
0);
}
}
public void restart(View v) {
getPhoneNumberFromMobile = new GetNum();
list = getPhoneNumberFromMobile.getPhoneNumberFromMobile(this);
adapter = new MyAdapter(list, this);
lv.setAdapter(adapter);
lv.setOnItemClickListener(this);
lv.setOnItemLongClickListener(this);
}
protected void onStart() {
super.onStart();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
protected void onRestart(){
super.onRestart();
}
}
2.GetNum:
package com.example.contacts2;
import static android.content.ContentValues.TAG;
import android.annotation.SuppressLint;
import android.content.Context;
import android.database.Cursor;
import android.provider.ContactsContract;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
public class GetNum {
private List<PhoneInfo> list;
private int[] ID=new int[100];
private int max=0;
private int i;
public List<PhoneInfo> getPhoneNumberFromMobile(Context context) {
// TODO Auto-generated constructor stub
list = new ArrayList<PhoneInfo>();
Cursor cursor = context.getContentResolver()
.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
new String[] { "display_name", "sort_key", "contact_id",
"data1" }, null, null, null);
// moveToNext方法返回的是一个boolean类型的数据
while (cursor.moveToNext()) {
//读取通讯录的姓名
@SuppressLint("Range") String name = cursor.getString(cursor
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
Log.e(TAG, "getPhoneNumberFromMobile: "+name );
//读取通讯录的号码
@SuppressLint("Range") String number = cursor.getString(cursor
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Log.e(TAG, "getPhoneNumberFromMobile: "+number );
@SuppressLint("Range") int Id = cursor.getInt(cursor
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
Log.e(TAG, "getPhoneNumberFromMobile: "+Id );
for( i=0;i<max;i++){
if(ID[i]==Id)
{
break;
}
}
if(i==max)
{
ID[i]=Id;
String Sortkey = getSortkey(cursor.getString(1));
PhoneInfo phoneInfo = new PhoneInfo(name, number,Sortkey,Id);
list.add(phoneInfo);
}
}
cursor.close();
return list;
}
private static String getSortkey(String sortKeyString) {
String key =sortKeyString.substring(0,1).toUpperCase();
if (key.matches("[A-Z]")){
return key;
}else
return "#";
}
}
3.MyAdapter:
package com.example.contacts2;
import static android.content.ContentValues.TAG;
import android.content.Context;
import android.graphics.Color;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
import javax.xml.namespace.QName;
public class MyAdapter extends BaseAdapter {
private List<PhoneInfo> list;
private Context context;
public MyAdapter(List<PhoneInfo> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
/*if(convertView==null){
ViewHolder viewHolder=new ViewHolder();
LayoutInflater inflater=LayoutInflater.from(context);
convertView=inflater.inflate(R.layout.item, parent,false);
viewHolder.name=(TextView) convertView.findViewById(R.id.name);
viewHolder.number=(TextView) convertView.findViewById(R.id.number);
viewHolder.name.setText(list.get(position).getName());
viewHolder.number.setText(list.get(position).getNumber());
convertView.setTag(viewHolder);
Log.e(TAG, "getView: "+ list.get(position).getName()+list.get(position).getNumber());
}
return convertView;*/
View view=View.inflate(context, R.layout.item, null);
TextView name=(TextView) view.findViewById(R.id.name);
TextView number=(TextView) view.findViewById(R.id.number);
TextView image=( TextView) view.findViewById(R.id.image);
double r = Math.random();
int num = (int) (r*7 + 1);
int[] color = new int[]{Color.BLUE,Color.GREEN,Color.YELLOW,Color.LTGRAY,Color.RED,Color.GREEN,Color.YELLOW};
image.setBackgroundColor(color[num-1]);
char[] words = list.get(position).getName().toCharArray();
String text= String.valueOf(words[0]);
image.setText(String.valueOf(words[0]));
name.setText(list.get(position).getName());
number.setText(list.get(position).getNumber());
return view;
}
}
4.PhoneInfo:
package com.example.contacts2;
public class PhoneInfo {
private String name;
private String number;
private String sortKey;
private int id;
public PhoneInfo(String name, String number, String sortKey, int id) {
this.name = name;
this.number = number;
this.sortKey = sortKey;
this.id = id;
}
public String getNumber() {
return number;
}
public String getName() {
return name;
}
}
5.Mydialog1:
package com.example.contacts2;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.PhoneNumberUtils;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import java.util.List;
public class Mydialog1 extends Dialog{
private PhoneInfo thislist;
private Intent intent;
private Context context;
public Mydialog1(@NonNull Context context, PhoneInfo thislist) {
super(context);
this.thislist=thislist;
this.context=context;
}
protected void onCreate(Bundle onSaveInstanceState){
super.onCreate(onSaveInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.dialog1);
TextView name=(TextView) findViewById(R.id.name);
name.setText(thislist.getName());
Button call=(Button) findViewById(R.id.call);
call.setOnClickListener(this::call);
Button imfo=(Button) findViewById(R.id.imfo);
imfo.setOnClickListener(this::imfo);
}
public void call(View v){
//call
intent = new Intent();
intent.setAction("android.intent.action.CALL");
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("tel:"+thislist.getNumber()));
context.startActivity(intent);
}
public void imfo(View v){
//imfo
intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:"+thislist.getNumber()));
context.startActivity(intent);
}
}
6.Mydialog2:
package com.example.contacts2;
import android.app.Dialog;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
public class Mydialog2 extends Dialog {
EditText newname;
EditText newpho;
String name;
String number;
Context context;
public Mydialog2(@NonNull Context context) {
super(context);
this.context=context;
}
protected void onCreate(Bundle onSaveInstanceState){
super.onCreate(onSaveInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.dialog2);
newname=(EditText) findViewById(R.id.newname);
newpho=(EditText) findViewById(R.id.newPho);
Button comf=(Button) findViewById(R.id.comf);
comf.setOnClickListener(this::comf);
Button cancel=(Button) findViewById(R.id.cancel);
cancel.setOnClickListener(this::cancel);
}
public void comf(View v){
name= String.valueOf(newname.getText());
number= String.valueOf(newpho.getText());
Insert(name,number);
dismiss();
Toast.makeText(context, "新建成功", Toast.LENGTH_SHORT).show();
}
public void cancel(View v){
dismiss();
}
public void Insert(String name,String number){
ContentValues values = new ContentValues();
//首先向 RawContacts.CONTENT_URI 执行一个空值插入,目的是获取系统返回的rawContactId
Uri rawContactUri = this.getContext().getContentResolver()
.insert(ContactsContract.RawContacts.CONTENT_URI, values);
long rawContactId = ContentUris.parseId(rawContactUri);
//往 data 表入姓名数据
values.clear();
values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
values.put(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, name);
this.getContext().getContentResolver()
.insert( ContactsContract.Data.CONTENT_URI, values);
//往 data 表入电话数据
values.clear();
values.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone
.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, number);
values.put(ContactsContract.CommonDataKinds.Phone.TYPE
, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
this.getContext().getContentResolver().insert(
ContactsContract.Data.CONTENT_URI, values);
}
}
7.Mydialog3:
package com.example.contacts2;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
public class Mydialog3 extends Dialog {
private String name;
private Context context;
private String number;
public Mydialog3(@NonNull Context context,String name,String number) {
super(context);
this.context=context;
this.name=name;
this.number=number;
}
protected void onCreate(Bundle onSaveInstanceState){
super.onCreate(onSaveInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.dialog3);
Button edit=(Button) findViewById(R.id.edit);
edit.setOnClickListener(this::edit);
Button delete=(Button) findViewById(R.id.delete);
delete.setOnClickListener(this::delete);
TextView editname=(TextView) findViewById(R.id.editname);
editname.setText((CharSequence) name);
}
public void edit(View v){
Toast.makeText(context, "edit", Toast.LENGTH_LONG).show();
dismiss();
Mydialog4 mydialog4=new Mydialog4(context, name, number);
mydialog4.show();
}
public void delete(View v){
getContext().getContentResolver().delete(ContactsContract.Data.CONTENT_URI,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+"=?",
new String[]{name});
Toast.makeText(context, "删除成功", Toast.LENGTH_LONG).show();
dismiss();
}
}
8.Mydialog4:
package com.example.contacts2;
import static android.provider.ContactsContract.CommonDataKinds.*;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
public class Mydialog4 extends Dialog {
EditText editname;
EditText editpho;
String name;
String number;
Context context;
public Mydialog4(@NonNull Context context,String name,String number) {
super(context);
this.context=context;
this.name=name;
this.number=number;
}
protected void onCreate(Bundle onSaveInstanceState){
super.onCreate(onSaveInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.dialog4);
editname=(EditText) findViewById(R.id.editname);
editpho=(EditText) findViewById(R.id.editPho);
editname.setText(name);
editpho.setText(number);
Button comf=(Button) findViewById(R.id.editcomf);
comf.setOnClickListener(this::editcomf);
Button cancel=(Button) findViewById(R.id.editcancel);
cancel.setOnClickListener(this::editcancel);
}
public void editcomf(View v){
delete( name);
name= String.valueOf(editname.getText());
number= String.valueOf(editpho.getText());
Insert( name,number);
dismiss();
Toast.makeText(context, "编辑成功", Toast.LENGTH_SHORT).show();
}
public void delete(String name){
getContext().getContentResolver().delete(ContactsContract.Data.CONTENT_URI,
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME+"=?",
new String[]{name});
}
public void Insert(String name,String number){
ContentValues values = new ContentValues();
//首先向 RawContacts.CONTENT_URI 执行一个空值插入,目的是获取系统返回的rawContactId
Uri rawContactUri = this.getContext().getContentResolver()
.insert(ContactsContract.RawContacts.CONTENT_URI, values);
long rawContactId = ContentUris.parseId(rawContactUri);
//往 data 表入姓名数据
values.clear();
values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
values.put(ContactsContract.Data.MIMETYPE,
ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, name);
this.getContext().getContentResolver()
.insert( ContactsContract.Data.CONTENT_URI, values);
//往 data 表入电话数据
values.clear();
values.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone
.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, number);
values.put(ContactsContract.CommonDataKinds.Phone.TYPE
, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
this.getContext().getContentResolver().insert(
ContactsContract.Data.CONTENT_URI, values);
}
public void editcancel(View v){
dismiss();
}
}
2.界面实现:
1.activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".contacts" >
<Button
android:layout_width="74dp"
android:layout_height="79dp"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_marginRight="5dp"
android:layout_marginBottom="5dp"
android:background="@drawable/add2"
android:onClick="add" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:id="@+id/restart"
android:text="my联系人"
android:onClick="restart"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#7DD6DD"/>
<ListView
android:id="@+id/contents_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:scrollbars="vertical"
android:visibility="visible"></ListView>
</LinearLayout>
</RelativeLayout>
2.dialog1:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/beijin"
android:padding="20dp"
>
<TextView
android:id="@+id/name"
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_centerHorizontal="true"
android:layout_marginBottom="10dp"
android:text="name"
android:gravity="center"
android:background="@drawable/button"/>
<Button
android:layout_width="87dp"
android:layout_height="40dp"
android:layout_below="@+id/name"
android:text="电话"
android:id="@+id/call"
android:background="@drawable/telep1"
android:onClick="call"/>
<Button
android:layout_width="87dp"
android:layout_height="40dp"
android:layout_toRightOf="@+id/call"
android:layout_below="@+id/name"
android:layout_marginLeft="30dp"
android:text="短信"
android:background="@drawable/imfo2"
android:id="@+id/imfo"
android:onClick="imfo"/>
</RelativeLayout>
3.dialog2:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="260dp"
android:layout_height="190dp">
<TextView
android:id="@+id/mytitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentTop="true"
android:layout_marginBottom="20dp"
android:text="新 建"
android:background="@drawable/button3"/>
<TextView
android:id="@+id/type1"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_alignTop="@+id/newname"
android:layout_marginTop="9dp"
android:layout_marginRight="0dp"
android:layout_toLeftOf="@+id/newname"
android:gravity="center"
android:text="姓 名"
android:background="@drawable/button4"/>
<EditText
android:id="@+id/newname"
android:layout_width="177dp"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_below="@+id/mytitle" />
<TextView
android:id="@+id/type2"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_alignTop="@+id/newPho"
android:layout_centerHorizontal="true"
android:layout_marginTop="15dp"
android:layout_marginRight="2dp"
android:layout_toLeftOf="@+id/newPho"
android:gravity="center"
android:text="电 话"
android:background="@drawable/button4"/>
<EditText
android:id="@+id/newPho"
android:layout_width="177dp"
android:layout_height="wrap_content"
android:layout_below="@+id/newname"
android:layout_centerHorizontal="true" />
<Button
android:id="@+id/comf"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/newPho"
android:layout_alignLeft="@+id/newPho"
android:onClick="comf"
android:text="确认"
android:background="@drawable/button"/>
<Button
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/newPho"
android:layout_toRightOf="@+id/comf"
android:onClick="cancel"
android:text="取消"
android:background="@drawable/button2"/>
</RelativeLayout>
4.dialog3:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/beijin"
android:padding="20dp">
<TextView
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_centerHorizontal="true"
android:layout_marginBottom="10dp"
android:text="name"
android:gravity="center"
android:background="@drawable/button3"
android:id="@+id/editname"/>
<Button
android:layout_width="77dp"
android:layout_height="40dp"
android:layout_below="@+id/editname"
android:text="编辑"
android:id="@+id/edit"
android:onClick="edit"
android:background="@drawable/button4"/>
<Button
android:layout_width="77dp"
android:layout_height="40dp"
android:layout_toRightOf="@+id/edit"
android:layout_below="@+id/editname"
android:layout_marginLeft="30dp"
android:text="删除"
android:id="@+id/delete"
android:onClick="delete"
android:background="@drawable/button2"/>
</RelativeLayout>
5.dialog4:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="240dp"
android:layout_height="190dp">
<TextView
android:id="@+id/mytitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginBottom="20dp"
android:text="编 辑"
android:background="@drawable/button3"/>
<TextView
android:id="@+id/type1"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_alignTop="@+id/editname"
android:layout_marginTop="9dp"
android:layout_marginRight="0dp"
android:layout_toLeftOf="@+id/editname"
android:text="姓名"
android:gravity="center"
android:background="@drawable/button4"/>
<EditText
android:id="@+id/editname"
android:layout_width="177dp"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_below="@+id/mytitle" />
<TextView
android:id="@+id/type2"
android:layout_width="wrap_content"
android:layout_height="30dp"
android:layout_alignTop="@+id/editPho"
android:layout_centerHorizontal="true"
android:layout_marginTop="15dp"
android:layout_marginRight="2dp"
android:layout_toLeftOf="@+id/editPho"
android:text="电话"
android:gravity="center"
android:background="@drawable/button4"/>
<EditText
android:id="@+id/editPho"
android:layout_width="177dp"
android:layout_height="wrap_content"
android:layout_below="@+id/editname"
android:layout_centerHorizontal="true" />
<Button
android:id="@+id/editcomf"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editPho"
android:layout_alignLeft="@+id/editPho"
android:onClick="editcomf"
android:text="确认"
android:background="@drawable/button"/>
<Button
android:id="@+id/editcancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/editPho"
android:layout_toRightOf="@+id/editcomf"
android:onClick="editcancel"
android:text="取消"
android:background="@drawable/button2"/>
</RelativeLayout>
6.item.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical">
<TextView
android:id="@+id/image"
android:layout_width="45dp"
android:layout_height="45dp"
android:gravity="center"
android:background="@color/white" />
<TextView
android:id="@+id/name"
android:layout_marginLeft="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:typeface="serif"
android:lineSpacingExtra="10dp"
android:letterSpacing="0.2"
android:textStyle="bold"
/>
<!-- android:textSize="20dp"-->
<TextView
android:id="@+id/number"
android:layout_marginLeft="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:typeface="serif"
/>
</LinearLayout>
3.总结
最左边通过对联系人名字的随机取单字,颜色随机生成,实现对联系人的简单显示,中间就是联系人的电话了,对联系人所在行进行点击可选择电话,短信功能,长按可选择删除,修改功能。点击右下角的加号即可实现添加联系人,对于修改操作,我是先删除再添加,从而实现修改。
资源: