listview 联系人排序分组

本文介绍了一个实用的拼音转换工具类,用于将中文字符转换为拼音,并提供了一个右侧字母导航视图的实现,方便用户快速定位到列表中的特定位置。


排序工具类:: 网上拔得

public class PingYinUtil {
     /**
        * 将字符串中的中文转化为拼音,其他字符不变
        *
        * @param inputString
        * @return
        */
        public static String getPingYin(String inputString) {
            HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
            format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
            format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
            format.setVCharType(HanyuPinyinVCharType.WITH_V);

            char[] input = inputString.trim().toCharArray();
            String output = "";

            try {
                for (int i = 0; i < input.length; i++) {
                    if (java.lang.Character.toString(input[i]).
                    matches("[\\u4E00-\\u9FA5]+")) {
                        String[] temp = PinyinHelper.
                        toHanyuPinyinStringArray(input[i],
                        format);
                        output += temp[0];
                    } else
                        output += java.lang.Character.toString(
                        input[i]);
                }
            } catch (BadHanyuPinyinOutputFormatCombination e) {
                e.printStackTrace();
            }
            return output;
        }
        
        /**  
         * 汉字转换位汉语拼音首字母,英文字符不变  
         * @param chines 汉字  
         * @return 拼音     
         */     
        public static String converterToFirstSpell(String chines){             
             String pinyinName = "";      
            char[] nameChar = chines.toCharArray();      
             HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();      
             defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);      
             defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);      
            for (int i = 0; i < nameChar.length; i++) {      
                if (nameChar[i] > 128) {      
                    try {      
                         pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0].charAt(0);      
                     } catch (BadHanyuPinyinOutputFormatCombination e) {      
                         e.printStackTrace();      
                     }      
                 }else{      
                     pinyinName += nameChar[i];      
                 }      
             }      
            return pinyinName;      
         }   
}

public class PingYinUtil {
     /**
        * 将字符串中的中文转化为拼音,其他字符不变
        *
        * @param inputString
        * @return
        */
        public static String getPingYin(String inputString) {
            HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
            format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
            format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
            format.setVCharType(HanyuPinyinVCharType.WITH_V);

            char[] input = inputString.trim().toCharArray();
            String output = "";

            try {
                for (int i = 0; i < input.length; i++) {
                    if (java.lang.Character.toString(input[i]).
                    matches("[\\u4E00-\\u9FA5]+")) {
                        String[] temp = PinyinHelper.
                        toHanyuPinyinStringArray(input[i],
                        format);
                        output += temp[0];
                    } else
                        output += java.lang.Character.toString(
                        input[i]);
                }
            } catch (BadHanyuPinyinOutputFormatCombination e) {
                e.printStackTrace();
            }
            return output;
        }
        
        /**  
         * 汉字转换位汉语拼音首字母,英文字符不变  
         * @param chines 汉字  
         * @return 拼音     
         */     
        public static String converterToFirstSpell(String chines){             
             String pinyinName = "";      
            char[] nameChar = chines.toCharArray();      
             HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();      
             defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);      
             defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);      
            for (int i = 0; i < nameChar.length; i++) {      
                if (nameChar[i] > 128) {      
                    try {      
                         pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0].charAt(0);      
                     } catch (BadHanyuPinyinOutputFormatCombination e) {      
                         e.printStackTrace();      
                     }      
                 }else{      
                     pinyinName += nameChar[i];      
                 }      
             }      
            return pinyinName;      
         }   
}

网上拔得;;;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Typeface;
import android.graphics.drawable.ColorDrawable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;


public class RightLetterView extends View {


	public RightLetterView(Context context, AttributeSet attrs, int defStyleAttr) {
		super(context, attrs, defStyleAttr);
		// TODO Auto-generated constructor stub
	}


	public RightLetterView(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
	}


	public RightLetterView(Context context) {
		super(context);


	}


	// 分类
	String[] assort = { "★", "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 Paint paint = new Paint();
	// 选择的索引
	private int selectIndex = -1;
	// 字母监听器
	private OnTouchAssortListener mOnTouch;


	// 接口回调
	public void setOnTouchAssortListener(OnTouchAssortListener onTouch) {
		mOnTouch = onTouch;
	}


	public interface OnTouchAssortListener {
		public void onTouchAssortListener(String s);


		public void onTouchAssortUP();
	}


	@Override
	public void draw(Canvas canvas) {
		super.draw(canvas);
		int height = getHeight();
		int width = getWidth();
		int interval = height / assort.length;
		for (int i = 0; i < assort.length; i++) {
			paint.setColor(Color.BLACK);
			// 粗体
			paint.setTypeface(Typeface.DEFAULT_BOLD);
			// 抗锯齿
			paint.setAntiAlias(true);
			paint.setTextSize(30);


			if (i == selectIndex) {
				paint.setColor(Color.parseColor("#3399ff"));
				paint.setFakeBoldText(true);
			}
			float xPos = width / 2 - paint.measureText(assort[i]) / 2;
			float yPos = interval * i + interval;
			canvas.drawText(assort[i], xPos, yPos, paint);
			paint.reset();
		}
	}


	@Override
	public boolean dispatchTouchEvent(MotionEvent event) {
		final float y = event.getY();// 点击y坐标
		// 点击y坐标所占总高度的比例*b数组的长度就等于点击b中的个数.
		final int index = (int) (y / getHeight() * assort.length);
		if (index >= 0 && index < assort.length) {
			switch (event.getAction()) {
			case MotionEvent.ACTION_DOWN:
				// 改变背景为选中状态
				setBackgroundColor(Color.GRAY);
				selectIndex = index;
				if (mOnTouch != null) {
					mOnTouch.onTouchAssortListener(assort[selectIndex]);
				}
				break;
			case MotionEvent.ACTION_MOVE:
				setBackgroundColor(Color.GRAY);
				if (selectIndex != index) {
					selectIndex = index;
					if (mOnTouch != null) {
						mOnTouch.onTouchAssortListener(assort[selectIndex]);
					}
				}


				break;
			case MotionEvent.ACTION_UP:
				// 透明色
				setBackgroundColor(getResources().getColor(
						R.color.color_transparent));
				if (mOnTouch != null) {
					mOnTouch.onTouchAssortUP();
				}
				selectIndex = -1;
				break;
			}
		} else {
			selectIndex = -1;
			if (mOnTouch != null) {
				mOnTouch.onTouchAssortUP();
			}
		}
		invalidate();
		return true;
	}


	@Override
	public boolean onTouchEvent(MotionEvent event) {
		// TODO Auto-generated method stub
		return super.onTouchEvent(event);
	}
}

public class PingYinUtil {
     /**
        * 将字符串中的中文转化为拼音,其他字符不变
        *
        * @param inputString
        * @return
        */
        public static String getPingYin(String inputString) {
            HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
            format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
            format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
            format.setVCharType(HanyuPinyinVCharType.WITH_V);

            char[] input = inputString.trim().toCharArray();
            String output = "";

            try {
                for (int i = 0; i < input.length; i++) {
                    if (java.lang.Character.toString(input[i]).
                    matches("[\\u4E00-\\u9FA5]+")) {
                        String[] temp = PinyinHelper.
                        toHanyuPinyinStringArray(input[i],
                        format);
                        output += temp[0];
                    } else
                        output += java.lang.Character.toString(
                        input[i]);
                }
            } catch (BadHanyuPinyinOutputFormatCombination e) {
                e.printStackTrace();
            }
            return output;
        }
        
        /**  
         * 汉字转换位汉语拼音首字母,英文字符不变  
         * @param chines 汉字  
         * @return 拼音     
         */     
        public static String converterToFirstSpell(String chines){             
             String pinyinName = "";      
            char[] nameChar = chines.toCharArray();      
             HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();      
             defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);      
             defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);      
            for (int i = 0; i < nameChar.length; i++) {      
                if (nameChar[i] > 128) {      
                    try {      
                         pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0].charAt(0);      
                     } catch (BadHanyuPinyinOutputFormatCombination e) {      
                         e.printStackTrace();      
                     }      
                 }else{      
                     pinyinName += nameChar[i];      
                 }      
             }      
            return pinyinName;      
         }   
}

/**
* letterview 选中监听 内部类

* @author Administrator

*/
class MOnTouchAssortListener implements OnTouchAssortListener {
PopupWindow popupWindow = null;
TextView tv_letter;
View layoutView;


public MOnTouchAssortListener() {
layoutView = LayoutInflater.from(MainActivity.this).inflate(
R.layout.main_letterpop_layout, null);
tv_letter = (TextView) layoutView
.findViewById(R.id.letterPop_tv_letter);
layoutView.getBackground().setAlpha(1);
}


@Override
public void onTouchAssortListener(String str) {

 int position = mAdapter.getPositionForSection(str.charAt(0));  
              if(position != -1){  
                  lv_content.setSelection(position);  
              }  

// 为选中的首字母
if (popupWindow == null) {
popupWindow = new PopupWindow(layoutView,
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
false);
// 显示在Activity的根视图中心
popupWindow.showAtLocation(getWindow().getDecorView(),
Gravity.CENTER, 0, 0);
}
tv_letter.setText(str);
}


@Override
public void onTouchAssortUP() {
if (popupWindow != null) {
popupWindow.dismiss();
}
popupWindow = null;
}


}



public class PingYinUtil {
     /**
        * 将字符串中的中文转化为拼音,其他字符不变
        *
        * @param inputString
        * @return
        */
        public static String getPingYin(String inputString) {
            HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
            format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
            format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
            format.setVCharType(HanyuPinyinVCharType.WITH_V);

            char[] input = inputString.trim().toCharArray();
            String output = "";

            try {
                for (int i = 0; i < input.length; i++) {
                    if (java.lang.Character.toString(input[i]).
                    matches("[\\u4E00-\\u9FA5]+")) {
                        String[] temp = PinyinHelper.
                        toHanyuPinyinStringArray(input[i],
                        format);
                        output += temp[0];
                    } else
                        output += java.lang.Character.toString(
                        input[i]);
                }
            } catch (BadHanyuPinyinOutputFormatCombination e) {
                e.printStackTrace();
            }
            return output;
        }
        
        /**  
         * 汉字转换位汉语拼音首字母,英文字符不变  
         * @param chines 汉字  
         * @return 拼音     
         */     
        public static String converterToFirstSpell(String chines){             
             String pinyinName = "";      
            char[] nameChar = chines.toCharArray();      
             HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();      
             defaultFormat.setCaseType(HanyuPinyinCaseType.UPPERCASE);      
             defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);      
            for (int i = 0; i < nameChar.length; i++) {      
                if (nameChar[i] > 128) {      
                    try {      
                         pinyinName += PinyinHelper.toHanyuPinyinStringArray(nameChar[i], defaultFormat)[0].charAt(0);      
                     } catch (BadHanyuPinyinOutputFormatCombination e) {      
                         e.printStackTrace();      
                     }      
                 }else{      
                     pinyinName += nameChar[i];      
                 }      
             }      
            return pinyinName;      
         }   
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值