本章实现的功能:从Android手机中得到通讯录联系人的数据,并且实现A-Z排序和搜索过滤
以下是在本人手机中调试的效果图
要实现此功能
1,通过ContentProvider知识点读取Android手机中联系人数据
对ContentProvider还不熟悉的朋友可以参考下ContentProvider数据共享
记得要在AndroidManifest.xml声明权限<uses-permission android:name="android.permission.READ_CONTACTS" />
2,为了方便用到了汉字转拼音的pinyin4j-2.5.0.jar包,代码中需要根据拼音进行排序(不用这个包,用其他方法也可实现汉字转拼音)
首先来看看最右边字母列的实现,是直接继承View画出来的
package huahua.mycontacts;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;
public class AlphabetScrollBar extends View {
private Paint mPaint = new Paint();
private String[] mAlphabet = new String[] {
"A", "B", "C", "D", "E", "F", "G","H", "I", "J", "K", "L", "M", "N", "O", "P", "Q",
"R", "S", "T", "U", "V", "W", "X", "Y", "Z"
};
private boolean mPressed;
private int mCurPosIdx = -1;
private int mOldPosIdx = -1;
private OnTouchBarListener mTouchListener;
private TextView LetterNotice;
public AlphabetScrollBar(Context arg0, AttributeSet arg1, int arg2) {
super(arg0, arg1, arg2);
// TODO Auto-generated constructor stub
}
public AlphabetScrollBar(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public AlphabetScrollBar(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public void setTextView(TextView LetterNotice) {
this.LetterNotice = LetterNotice;
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
int width = this.getWidth();
int height = this.getHeight();
int singleLetterH = height/mAlphabet.length;
if(mPressed) {
//如果处于按下状态,改变背景及相应字体的颜色
canvas.drawColor(Color.parseColor("#40000000"));
}
for(int i=0; i<mAlphabet.length; i++) {
mPaint.setColor(Color.parseColor("#000000"));
mPaint.setAntiAlias(true);
mPaint.setTextSize(23);