- 浏览: 47874 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
嘟嘟橙:
新手请教,就是添加较多联系人时,速度会慢,有没有优化的办法? ...
批量添加联系人 -
嘟嘟橙:
新手学习。感谢分享。
批量添加联系人 -
one_old_water:
哥,网上传来传去的就是想要那种效果:按第一次会提示,两秒后按还 ...
My “再按一次后退键退出应用” -
yx1989:
qiuyouzhi 写道你好,我用这种方式插入联系人,当联系人 ...
批量添加联系人 -
qiuyouzhi:
你好,我用这种方式插入联系人,当联系人在二三百条时候,将近耗了 ...
批量添加联系人
那,我原创的文章比较少,所以基本上都是自己看了,然后稍加修改的!
综合这两个帖子:
http://blog.csdn.net/ilysony/article/details/6292771
http://blog.csdn.net/yan_daoqiu/article/details/6393300
中文的还没去实验
[img]
我不知道怎么传图 - - !
[/img]
大概思路就是在listView里面设置了 section,然后侧边栏是一个自定义的组件
侧边栏ontouch中会去 让listview 跳到相应位置list.setSelection();
listview中设置onScroll监听器,滑动时候让中间弹出windows,不滑动时候隐藏
window中显示的就是首字母。
侧边栏代码
listView的adapter
涉及到section的显示 以及 sidebar中要获取positon的方法
主程序的中显示的window相关:
综合这两个帖子:
http://blog.csdn.net/ilysony/article/details/6292771
http://blog.csdn.net/yan_daoqiu/article/details/6393300
中文的还没去实验
[img]
我不知道怎么传图 - - !
[/img]
大概思路就是在listView里面设置了 section,然后侧边栏是一个自定义的组件
侧边栏ontouch中会去 让listview 跳到相应位置list.setSelection();
listview中设置onScroll监听器,滑动时候让中间弹出windows,不滑动时候隐藏
window中显示的就是首字母。
侧边栏代码
public class SideBar extends View{ private char[] l; private SectionIndexer sectionIndexter = null; private ListView list; private final int m_nItemHeight = 29; public SideBar(Context context) { super(context); init(); } public SideBar(Context context, AttributeSet attrs) { super(context, attrs); init(); } private void init() { l = new char[] { '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' }; setBackgroundColor(0x44FFFFFF); } public SideBar(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } public void setListView(ListView _list) { list = _list; sectionIndexter = (SectionIndexer) _list.getAdapter(); } public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); int i = (int) event.getY(); int idx = i / m_nItemHeight; if (idx >= l.length) { idx = l.length - 1; } else if (idx < 0) { idx = 0; } if (event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE) { if (sectionIndexter == null) { sectionIndexter = (SectionIndexer) list.getAdapter(); } int position = sectionIndexter.getPositionForSection(l[idx]); if (position == -1) { return true; } list.setSelection(position); } return true; } protected void onDraw(Canvas canvas) { Paint paint = new Paint(); paint.setColor(0xFFA6A9AA); paint.setTextSize(20); paint.setTextAlign(Paint.Align.CENTER); float widthCenter = getMeasuredWidth() / 2; for (int i = 0; i < l.length; i++) { canvas.drawText(String.valueOf(l[i]), widthCenter, m_nItemHeight + (i * m_nItemHeight), paint); } super.onDraw(canvas); } }
listView的adapter
涉及到section的显示 以及 sidebar中要获取positon的方法
public class MyAdapter extends BaseAdapter implements SectionIndexer{ private ArrayList<String> stringArray; private Context context; public MyAdapter(Context _context, ArrayList<String> arr) { stringArray = arr; context = _context; } public int getCount() { return stringArray.size(); } public Object getItem(int arg0) { return stringArray.get(arg0); } public long getItemId(int arg0) { return 0; } public View getView(int position, View v, ViewGroup parent) { LayoutInflater inflate = ((Activity) context).getLayoutInflater(); View view = (View) inflate.inflate(R.layout.listview_row, null); LinearLayout header = (LinearLayout) view.findViewById(R.id.section); String label = stringArray.get(position); char firstChar = label.toUpperCase().charAt(0); if (position == 0) { setSection(header, label); } else { String preLabel = stringArray.get(position - 1); char preFirstChar = preLabel.toUpperCase().charAt(0); if (firstChar != preFirstChar) { setSection(header, label); } else { header.setVisibility(View.GONE); } } TextView textView = (TextView) view.findViewById(R.id.textView); textView.setText(label); return view; } private void setSection(LinearLayout header, String label) { TextView text = new TextView(context); header.setBackgroundColor(0xffaabbcc); text.setTextColor(Color.WHITE); text.setText(label.substring(0, 1).toUpperCase()); text.setTextSize(20); text.setPadding(5, 0, 0, 0); text.setGravity(Gravity.CENTER_VERTICAL); header.addView(text); } public int getPositionForSection(int section) { if (section == 35) { return 0; } for (int i = 0; i < stringArray.size(); i++) { String l = stringArray.get(i); char firstChar = l.toUpperCase().charAt(0); if (firstChar == section) { return i; } } return -1; } public int getSectionForPosition(int arg0) { return 0; } public Object[] getSections() { return null; } }
主程序的中显示的window相关:
TextView overlay = (TextView) View.inflate(this, R.layout.overlay, null); getWindowManager() .addView( overlay, 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) ); list.setOnScrollListener(onScroll); OnScrollListener onScroll = new OnScrollListener() { boolean visible; @Override public void onScrollStateChanged(AbsListView view, int scrollState) { visible = true; if (scrollState == ListView.OnScrollListener.SCROLL_STATE_IDLE) { overlay.setVisibility(View.INVISIBLE); } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (visible) { overlay.setText(list.getItemAtPosition(firstVisibleItem).toString().substring(0, 1)); overlay.setVisibility(View.VISIBLE); } } };
- AlphabetListView.rar (398.4 KB)
- 下载次数: 94
发表评论
-
蓝牙传输文件
2011-09-28 10:51 4221这篇文章分为两部分: 第一部分:使用系统自身带的蓝牙功能,直 ... -
【转】Android APK反编译详解(附图)
2011-09-06 10:18 1035原帖地址:http://www.devdiv.com/arti ... -
解析xml
2011-09-05 15:17 884FileInfo是我自己定义的类 public clas ... -
利用popupWindow来制作自定义menu
2011-09-05 15:07 1806我找了好久没发现怎么给系统自带的menu换背景,网上有个帖子写 ... -
java 对读取的文件进行排序
2011-09-05 14:51 7635参数里面的isAscend 用来决定是升序排列 还是降序排列: ... -
java 递归读取文件夹里的文件
2011-09-05 14:40 5647public static void scanSingle ... -
java 基本的文件操作
2011-09-05 14:35 901好吧,我基础真的很不扎实。 基本的文件操作都不熟,那么多总结 ... -
获取未安装apk的信息
2011-09-05 14:13 1786申明不是原创,忘记是在哪看的啦,网上转的那么多,也不知道谁是原 ... -
利用图片的填充属性来制作进度条
2011-09-05 12:46 2397大概原理就是定义了imageView 然后他的背景是一个bit ... -
类SldingDrawer的实现
2011-09-05 11:43 1603来自海涛给的例子,谢谢海涛一直的指导! 系统的sliding ... -
【转】工作八年总结
2011-09-02 23:26 740我只是想在某些时候想看再看一遍时候不至于到处去找,所以就转了原 ... -
显示隐藏软键盘
2011-08-30 10:44 871public void showInput(boolean ... -
My “再按一次后退键退出应用”
2011-07-20 16:50 1103其实你去网上搜这个标题一大堆的帖子,千篇一律的转自同一个人的帖 ... -
【转】Toast大全
2011-07-20 16:36 1196长见识了,转来留着用 原帖地址:http://www.cnb ... -
【转】关于android.view.WindowLeaked的解决方案
2011-07-12 09:15 834原帖:http://blog.csdn.net/u_x ... -
android程序换皮肤之二
2011-06-25 12:48 3033通过网上流传的sharedUserId实现 不同程序 ... -
android程序换皮肤之一
2011-06-23 20:13 3042皮肤内置在程序里面的!其实可以不用我这么复杂的,直接每次换肤更 ... -
批量添加联系人
2011-06-21 20:21 4462说实话,我找了一整天的帖子,好像所有关于批量添加联系人的帖子都 ... -
联系人的基本操作
2011-06-21 20:07 1174其实联系人那几个表刚开始看起来很绕的! 后来接触 ...
相关推荐
本教程聚焦于创建一个仿通讯录侧边栏滑动效果,实现A-Z字母检索的功能。这个功能常见于许多手机应用中,用于快速定位和筛选以特定字母开头的联系人。 首先,我们要理解自定义View的基本概念。自定义View是通过继承...
综上所述,"Android仿微信通讯录侧边栏"是一个集成了布局设计、数据处理、动画效果和用户交互的综合项目,开发者需要掌握多种Android开发技能才能实现。通过对以上知识点的理解和实践,可以开发出具有微信通讯录侧...
在Android开发中,实现仿通讯录侧边栏滑动SiderBar效果是一种常见的交互设计,通常用于快速定位列表中的内容。SiderBar通常包含26个英文字母(以及可能的其他字符,如#)作为索引,用户可以通过滑动选择对应的字母,...
首先,我们需要自定义一个控件来模拟通讯录的侧边栏滑动效果。这个控件通常是一个可滚动的侧滑菜单,它会显示字母表,用户可以通过滑动选择相应的首字母来快速定位到联系人。在Android中,我们可以使用`...
在Android应用开发中,侧边栏快速索引是一种常见的交互设计,它借鉴了手机通讯录的查找方式,为长列表提供了高效便捷的导航。这种功能可以让用户通过点击或滑动侧边栏的字母来快速定位到目标内容,极大提升了用户...
这个效果使得用户可以通过滑动侧边栏快速跳转到字母表中的特定位置,提高用户体验。下面我们将深入探讨实现这一功能所涉及的技术点。 1. **侧边栏(SideBar)组件**: 侧边栏通常是一个水平滚动的视图,包含字母表的...
在Android应用开发中,侧边栏快速定位控件是一种常见的用户界面元素,它极大地提高了用户在长列表中的浏览效率。这种功能通常出现在通讯录、音乐播放器或任何包含大量分类数据的应用中。在这个主题中,我们将深入...
这个“swift-UITableViewIndexBar快速索引栏侧边栏字母索引栏通讯录”项目,旨在帮助开发者实现一个功能完备且高度可定制的快速索引栏,其特性包括自定义效果和动画,非常适合于类似通讯录的应用场景。 首先,快速...
在Android开发中,实现“仿微信通讯录列表侧边栏效果”是一种常见需求,它可以提供用户友好的体验,便于快速定位联系人。该效果的主要特点是根据联系人的首字符拼音进行排序,并通过侧边栏的字母索引来定位。下面将...
这个功能通常会在一个ListView或RecyclerView中实现,通过一个可滑动的侧边栏来显示字母索引,用户点击某个字母时,会跳转到对应的联系人列表部分。在实现这个功能时,我们主要会涉及到以下几个关键知识点: 1. **...
要实现快速滑动功能,我们首先需要创建一个侧边栏(SideBar)组件。这个侧边栏通常是一个垂直滚动条,包含所有字母,用户可以触摸字母来跳转到对应的联系人列表位置。我们可以自定义一个View,绘制出这些字母,并...
通常,这样的设计会包含一个可滑动的侧边栏(一般显示字母表),用户可以通过滑动侧边栏快速定位到相应姓名首字母的联系人。在顶部的ListView用于展示群组,而下方的ListView则展示按字母排序的个人联系人。 1. **...
- 为了实现快速滑动功能,首先在XML布局文件中添加`FastScroller`,然后在Activity或Fragment中绑定并设置相应的属性。 - 实现`SectionIndexer`接口,为`ListView`提供分段信息。 - 设置`ListView`的`...
实现"通信录联系人拼音侧边栏"涉及到以下几个关键知识点: 1. **数据处理**:首先,需要将通讯录中的联系人姓名转换为拼音。这通常需要使用到汉字到拼音的转换库,如Android平台上的`Pinyin4j`或iOS平台上的`...
为了实现滑动选择效果,需要监听侧边栏的滑动事件。可以通过`OnTouchListener`或自定义滑动监听器实现,当手指滑过字母时高亮显示,离开时恢复原状。 7. **性能优化** 对于大量联系人,处理拼音和过滤操作可能会...
这个设计通常包含一个垂直的侧边栏,显示26个英文字母(A到Z),用户点击某个字母后,通信录列表会滚动到相应首字母的联系人处。 实现这一功能,开发者需要考虑以下几个关键点: 1. **数据结构**:首先,通讯录...
在处理大量数据时,为了提高用户的搜索效率,我们常常需要实现类似通讯录那样的A-Z快速查找功能。这个"ListView 实现点击侧边A-Z快速查找"的项目,旨在帮助用户通过点击字母导航栏快速定位到目标数据项。下面将详细...
3. **侧边栏效果**:侧边栏通常用于显示字母索引,方便用户快速定位联系人。这种效果可以通过创建一个自定义视图实现,视图包含一个滚动视图,显示所有字母,当用户点击某个字母时,根据Contacts数据过滤出以该字母...