Android Studio 获取手机联系人并进行,发短信,打电话,增删改操作

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.总结

        最左边通过对联系人名字的随机取单字,颜色随机生成,实现对联系人的简单显示,中间就是联系人的电话了,对联系人所在行进行点击可选择电话,短信功能,长按可选择删除,修改功能。点击右下角的加号即可实现添加联系人,对于修改操作,我是先删除再添加,从而实现修改。

资源:

零积分源码下载

  • 7
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值