package com.zuo.quickaction;
//Download by http://www.codefans.net
import android.app.Activity;
import android.content.Context;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
import android.widget.*;
import android.widget.AdapterView.OnItemClickListener;
import com.zuo.quickaction.QuickLocationRightTool.OnTouchingLetterChangedListener;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author zuowen
* @time 2013.05.08
* @email 782287169@qq.com
* <p/>
* 混合字符串处理 中英文排序 右侧悬浮栏 顶部名称提示栏 滚动悬浮提示
*/
public class QuickLocationMainActivity extends Activity implements ListView.OnScrollListener,
OnItemClickListener, android.view.View.OnClickListener
{
private QuickLocationRightTool letterListView;
private Handler handler;
private DisapearThread disapearThread;
private int scrollState;
private QuickLocationListAdapter quickLocationListAdapter;
private ListView listMain;
private TextView txtOverlay, title;
private WindowManager windowManager;
private String[] stringArr = {"ai", "zuo", "wn", "g黄真伊", "he河智苑", "@", "&&*(*", "?? ??? ???", "?", "擬好",
"上饶", "厦门", "深圳", "武林", "text1", "+*())*&%$^", "11112", "6666", "898和",
"阿拉伯", "阿镇", "下午", "责打", "浙江", "浙江", "阿布", "北京", "北城", "成", "城市", "123a", "234b", "678c", "得", "额",
"方", "搞", "广州", "黄石", "黄冈", "杭州", "上海", "武林"};
private String[] stringArr3 = new String[0];
private ArrayList arrayList = new ArrayList();
private ArrayList arrayList2 = new ArrayList();
private ArrayList arrayList3 = new ArrayList();
private Map<String, String> map = new HashMap<String, String>();
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
for (int i = 0; i < stringArr.length; i++) {
String pinyin = converterToPinYin(stringArr[i]);
arrayList.add(pinyin); //此列表增加拼音
Collections.sort(arrayList, new MixComparator());
if (!arrayList2.contains(pinyin.substring(0, 1)) && isWord(pinyin.substring(0, 1))) {
arrayList2.add(pinyin.substring(0, 1)); //此列表添加拼音首字母
Collections.sort(arrayList2, new MixComparator());
}
map.put(pinyin, stringArr[i]);
}
stringArr = (String[]) arrayList.toArray(stringArr);
arrayList3.add("#"); //此列表添加不规则字符
for (int i = 0; i < arrayList2.size(); i++) {
String string = (String) arrayList2.get(i);
arrayList3.add(string.toUpperCase()); //toUpperCase大写字母
}
arrayList3.add("*");
stringArr3 = (String[]) arrayList3.toArray(stringArr3); // 得到右侧英文字母列表
letterListView = (QuickLocationRightTool) findViewById(R.id.rightCharacterListView);
letterListView.setB(stringArr3);
letterListView.setOnTouchingLetterChangedListener(new LetterListViewListener());
textOverlayout();
// 初始化ListAdapter
quickLocationListAdapter = new QuickLocationListAdapter(this, stringArr, this, null);
listMain = (ListView) findViewById(R.id.listInfo);
listMain.setOnItemClickListener(this);
listMain.setOnScrollListener(this);
listMain.setAdapter(quickLocationListAdapter);
disapearThread = new DisapearThread();
}
/**
* 滚到悬浮字母
*/
public void textOverlayout()
{
handler = new Handler();
//顶部悬浮
title = (TextView) findViewById(R.id.list_title);
// 初始化首字母悬浮提示框
txtOverlay = (TextView) LayoutInflater.from(this).inflate(
R.layout.popup_char, null);
txtOverlay.setVisibility(View.INVISIBLE);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
PixelFormat.TRANSLUCENT);
windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
windowManager.addView(txtOverlay, lp);
}
/**
* 右侧导航条点击列表滚动指定位置
*/
public class LetterListViewListener implements
OnTouchingLetterChangedListener
{
public void onTouchingLetterChanged(final String s)
{
int num = 0;
for (int i = 0; i < stringArr.length; i++) {
if ("a".equals(s) || "#".equals(s)) { //顶部
num = 0;
}
else if ("*".equals(s)) { //底部
num = stringArr.length;
}
else if (isWord(stringArr[i].substring(0, 1)) && (character2ASCII(stringArr[i].substring(0, 1)) < (character2ASCII(s) + 32))) {
num += 1; //首先判断是字母,字母的ascll值小于s是,滚动位置+1;如果有10个数据小于s,就滚到10处
}
}
if (num < 2) {
listMain.setSelectionFromTop(num, 0);
}
else {
listMain.setSelectionFromTop(num, 5); //留点间隔
}
}
}
/**
* 滚动处理
* @param view
* @param firstVisibleItem
* @param visibleItemCount
* @param totalItemCount
*/
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount)
{
title.setVisibility(View.VISIBLE);
if (firstVisibleItem != 0) {
title.setText(map.get(stringArr[firstVisibleItem]));
}
else {
title.setText("a");
}
title.setText(map.get(stringArr[firstVisibleItem]));
txtOverlay.setText(String.valueOf(stringArr[firstVisibleItem].charAt(0)));// 泡泡文字以第一个可见列表为准
}
public void onScrollStateChanged(AbsListView view, int scrollState)
{
this.scrollState = scrollState;
if (scrollState == ListView.OnScrollListener.SCROLL_STATE_IDLE) {
handler.removeCallbacks(disapearThread);
// 提示延迟1.0s再消失
boolean bool = handler.postDelayed(disapearThread, 1000);
}
else {
txtOverlay.setVisibility(View.VISIBLE);
}
}
/**
* 列表点击
* @param parent
* @param view
* @param position
* @param id
*/
public void onItemClick(AdapterView<?> parent, View view, int position,
long id)
{
String personalName = map.get(stringArr[position]);
Toast.makeText(QuickLocationMainActivity.this, personalName, 1).show();
}
public void onClick(View view)
{
}
private class DisapearThread implements Runnable
{
public void run()
{
// 避免在1.5s内,用户再次拖动时提示框又执行隐藏命令。
if (scrollState == ListView.OnScrollListener.SCROLL_STATE_IDLE) {
txtOverlay.setVisibility(View.INVISIBLE);
}
}
}
public void onDestroy()
{
super.onDestroy();
txtOverlay.setVisibility(View.INVISIBLE);
title.setVisibility(View.INVISIBLE);
windowManager
没有合适的资源?快使用搜索试试~ 我知道了~
Android字母排序 类似通讯录字母检索
共102个文件
class:36个
xml:18个
svn-base:15个
5星 · 超过95%的资源 需积分: 10 1.4k 下载量 168 浏览量
2014-02-25
20:56:30
上传
评论 12
收藏 1.19MB RAR 举报
温馨提示
android ListView列表根据字母排序和定位,支持混合排序:混合字符串处理、中英文排序、右侧悬浮栏、顶部名称提示栏、滚动悬浮提示,运行效果图一看便知,目前Android机常见的通讯录搜索功能,本例模拟实现的效果还是让人很满意的。
资源推荐
资源详情
资源评论
收起资源包目录
Android字母排序 类似通讯录字母检索 (102个子文件)
all-wcprops 2KB
all-wcprops 2KB
all-wcprops 1KB
all-wcprops 226B
CharacterQuickLocationDemo.apk 165KB
CharacterQuickLocationDemo.afp.apk 165KB
CharacterQuickLocationDemo.unaligned.apk 165KB
QuickLocation.afp.apk 162KB
QuickLocation.apk 162KB
QuickLocation.unaligned.apk 162KB
proguard.cfg 1KB
QuickLocationMainActivity.class 11KB
Main.class 10KB
ListAdapter.class 4KB
QuickLocationListAdapter.class 4KB
RightCharacterListView.class 4KB
QuickLocationRightTool.class 4KB
QuickLocationMainActivity$MixComparator.class 2KB
Main$PinyinComparator.class 2KB
QuickLocationMainActivity$LetterListViewListener.class 2KB
Main$LetterListViewListener.class 2KB
QuickLocationMainActivity$DisapearThread.class 1KB
Main$DisapearThread.class 1KB
R$dimen.class 761B
R$dimen.class 761B
QuickLocationListAdapter$ViewHolder.class 669B
R.class 640B
R.class 640B
R$id.class 632B
R$id.class 632B
ListAdapter$ViewHolder.class 591B
R$color.class 481B
R$color.class 481B
R$layout.class 464B
R$layout.class 464B
R$drawable.class 437B
R$string.class 430B
R$string.class 430B
R$drawable.class 403B
RightCharacterListView$OnTouchingLetterChangedListener.class 348B
QuickLocationRightTool$OnTouchingLetterChangedListener.class 348B
BuildConfig.class 347B
BuildConfig.class 347B
R$attr.class 343B
R$attr.class 343B
QuickLocationMainActivity$1.class 266B
Main$1.class 203B
.classpath 404B
dir-prop-base 33B
dir-prop-base 33B
dir-prop-base 33B
dir-prop-base 33B
entries 1KB
entries 1KB
entries 932B
entries 388B
QuickLocation.iml 3KB
pinyin4j-2.5.0.jar 184KB
QuickLocationMainActivity.java 12KB
QuickLocationRightTool.java 4KB
QuickLocationListAdapter.java 4KB
BuildConfig.java 161B
Manifest.java 157B
R.java 143B
.name 26B
icon.png 3KB
icon.png 2KB
org.eclipse.core.resources.prefs 88B
default.properties 362B
MainAct.java.svn-base 18KB
QuickActionBar.java.svn-base 10KB
list_item.xml.svn-base 3KB
ListAdapter.java.svn-base 3KB
qa_bar.xml.svn-base 2KB
styles.xml.svn-base 2KB
CustomInterpolator.java.svn-base 1KB
action_item.xml.svn-base 1KB
main.xml.svn-base 1KB
dimension.xml.svn-base 714B
ActionItem.java.svn-base 681B
info_dialog.xml.svn-base 628B
popup_char_hint.xml.svn-base 389B
strings.xml.svn-base 183B
colors.xml.svn-base 168B
workspace.xml 48KB
uiDesigner.xml 9KB
misc.xml 7KB
list_item.xml 2KB
main.xml 1KB
compiler.xml 1KB
AndroidManifest.xml 698B
popup_char.xml 518B
dimension.xml 510B
encodings.xml 502B
modules.xml 277B
pinyin4j_2_5_0.xml 227B
colors.xml 213B
strings.xml 203B
vcs.xml 173B
ant.xml 170B
共 102 条
- 1
- 2
wl554623567
- 粉丝: 2
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页