自己用着M1S,感觉里面的联系人姓氏提示功能不错,用起来挺好的,就自己做了个比较简单的类似于这样的功能,代码如下:

package com.fnd.ui;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import android.os.Bundle;
import android.os.Handler;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;public class MainActivity extends Activity {private TextView tv_displayfamilyname;private ListView lv_displaylinkman;private String[] linkmanStrings = new String[] { "涂bing", "刘", "张fa", "徐","美", "郭", "王", "赵", "燕", "平三", "汗", "好哈", "新", "涂", "二", "三", "八戒","猴哥", "钟", "雨", "填", "张", "涂", "刘", "张", "徐", "美", "郭", "王", "赵","燕", "平", "汗", "好哈", "新", "涂", "二", "三", "八戒", "猴哥", "钟", "雨", "填","张", "涂", "刘", "张", "徐", "美", "郭", "王", "赵", "燕", "平", "汗", "好哈","新", "涂", "二", "三", "八戒", "猴哥", "钟", "雨", "填", "张" };private String firstdisplaystring;private boolean isshowing;private String predisplaystring;private Runnable displayrunnable;private int displaycount = 0;Handler handler = new Handler();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv_displayfamilyname = (TextView) findViewById(R.id.tv_displayfamilyname);lv_displaylinkman = (ListView) findViewById(R.id.lv_displaylinkman);//给ListView添加一个滚动监听器lv_displaylinkman.setOnScrollListener(new DisplayLinkmanOnScrollListener());List<Map<String, Object>> stringlist = new ArrayList<Map<String, Object>>();for (String str : linkmanStrings) {Map<String, Object> map = new HashMap<String, Object>();map.put("name", str);stringlist.add(map);}ListItemAdapter lia = new ListItemAdapter(MainActivity.this,stringlist, R.layout.ll_lvdisplaylinkman_item,new String[] { "name" }, new int[] { R.id.tv_item });lv_displaylinkman.setAdapter(lia);tv_displayfamilyname.setVisibility(View.INVISIBLE);displayrunnable = new DisplayRunnable();}final class DisplayLinkmanOnScrollListener implements OnScrollListener {//存储当前屏最上层Item在ListView中的位置private int firstVisibleItem = 0;@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {this.firstVisibleItem = firstVisibleItem;}@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {switch (scrollState) {case OnScrollListener.SCROLL_STATE_IDLE://当滑动停止// 提取出姓氏(当前屏中间Item)firstdisplaystring = linkmanStrings[firstVisibleItem+ displaycount / 2].substring(0, 1);if (!isshowing && !firstdisplaystring.equals(predisplaystring)) {tv_displayfamilyname.setVisibility(View.VISIBLE);isshowing = true;}tv_displayfamilyname.setText(firstdisplaystring);//移除当前消息队列Runnablehandler.removeCallbacks(displayrunnable);//添加新的消息队列Runnablehandler.postDelayed(displayrunnable, 2000);break;}}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.activity_main, menu);return true;}final class DisplayRunnable implements Runnable {@Overridepublic void run() {isshowing = false;tv_displayfamilyname.setVisibility(View.INVISIBLE);}}final class ListItemAdapter extends SimpleAdapter {LayoutInflater mInflater;List<Map<String, Object>> stringlist;public ListItemAdapter(Context context,List<Map<String, Object>> stringlist, int resource,String[] from, int[] to) {super(context, stringlist, resource, from, to);mInflater = LayoutInflater.from(context);this.stringlist = stringlist;}@Overridepublic int getCount() {return super.getCount();}@Overridepublic Object getItem(int position) {return super.getItem(position);}@Overridepublic long getItemId(int position) {return super.getItemId(position);}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder;if (convertView == null) {convertView = mInflater.inflate(R.layout.ll_lvdisplaylinkman_item, null);holder = new ViewHolder();holder.name = (TextView) convertView.findViewById(R.id.tv_item);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}System.out.println("position:" + position);System.out.println("stringlist size:" + stringlist.size());int lv_height = lv_displaylinkman.getHeight();int item_height = convertView.getHeight();System.out.println("lv_height:" + lv_height);System.out.println("item_height:" + item_height);// 算出手机一屏显示ListView Item的个数if (item_height != 0) {displaycount = lv_height / item_height;}holder.name.setText((String) stringlist.get(position).get("name"));return convertView;}}static class ViewHolder {TextView name;}
}

上面只实现了非常简单的功能,有兴趣的话可以实现非常丰富的功能。

Android联系人姓氏提示相关推荐

  1. android studio 如何提示方法的用法

    方法/步骤1在 Eclipse中鼠标放上去就可以提示方法的用法,实际上Android Studio也可以设置的.如图 Preferences > Editor >Generan> S ...

  2. Xamarin Android设置界面提示类型错误

    Xamarin Android设置界面提示类型错误 错误信息:Integer types not allow (at 'padding' with value '10') Android界面属性的长度 ...

  3. 运用单例模式、建造者模式和策略模式实现异步加载Android联系人资料

    学完设计模式很久了,最近又在看Android联系人提供程序的官方文档,于是就想实现一个方便的联系人管理程序demo,而联系人管理程序demo的核心就是要实现一个异步加载联系人资料的类,于是就有了下文. ...

  4. Android实现退出提示的功能

    摘要:本文主要是实现在Android中退出提示的功能,平常使用Android手机时,点击返回键时,由于不小心点击返回键过快,导至程序返回试界面之后直接退出程序,导至用户还要再重新登录一次.为解决此类问 ...

  5. [转]Android 代码自动提示功能

    源地址http://blog.sina.com.cn/s/blog_7dbac12501019mbh.html 或者http://blog.csdn.net/longvslove/article/de ...

  6. Android联系人Contacts详解

    1.获取联系人详细信息 在(一)中我们只是获取了联系人的ID和NAME,但是这是远远不够的,怎么样获取其他的值呢? public void fetchContactInformation() {Str ...

  7. Android Studio编译提示如下attribute layout_constraintBottom_toBottomOf (aka com.luck.pictureselector:layou

    1 问题 Android Studio编译提示错误如下 AAPT: error: attribute layout_constraintBottom_toBottomOf (aka com.luck. ...

  8. Android Studio之提示Gradle sync failed: Plugin with id ‘com.novoda.bintray-release‘ not found.

    1 问题 导入别人的模块到Android Studio,错误提示如下 Gradle sync failed: Plugin with id 'com.novoda.bintray-release' n ...

  9. android实现文本输入,Android实现智能提示的文本输入框AutoCompleteTextView

    今天我们要讲一个十分简单的内容,就是一个安卓控件的使用,用法很简单,但是很常用的一个.这里我用两种不同的写法来处理.当然,无论用哪一种写法,效果都是一样的. 我们先来看效果图. 要实现这种效果十分简单 ...

最新文章

  1. Genome Biology:赵方庆组揭示生命早期肠道菌群演变规律及决定因素
  2. python分片是什么_python中的分片
  3. 《高性能JavaScript》第五章 字符串和正则表达式
  4. 简单理解AOP(面向切面编程)
  5. Node.js+Express+MongoDB 实现学生增删改查
  6. 信管专业c语言考什么,计算机信息管理专业卫生事业单位招聘考试笔试模拟题(十)...
  7. python 2.7 error: Microsoft Visual C++ 9.0 is required
  8. android 行布局选择器,『自定义View实战』—— 银行种类选择器
  9. 解析函數論 Page 28 連續復變函數的最簡單的性質
  10. 手把手教你如何罗列提纲,避开这3个坑,提升写作效率50%
  11. Python return语句 函数返回值
  12. 【verilog教程】第9篇:verilog常见问题合集
  13. “完数”(C代码+流程图)
  14. php获取海康的视频流,全平台RTMP组件EasyRTMP如何通过海康SDK获取视频流推送到RTMP流媒体服务器...
  15. 零基础入门STM32编程——工具篇(四)
  16. ERP原理及应用教程-第五章
  17. es6 嵌套数组循环_[js]从 ES3 到 ES6 教你如何数组去重
  18. 显卡和CPU的关系像“主仆”,GPU的工作原理是什么
  19. 面试官:请你讲讲Thread.sleep(0) 的作用?
  20. 我的电脑硬盘由SSD+HD组合,在HD上成功安装CentOS6.9

热门文章

  1. event对象的offsetX, clientX, pageX, screenX
  2. JAVA计算机毕业设计中小学教师培训管理系统Mybatis+源码+数据库+lw文档+系统+调试部署
  3. 软考高级信息系统项目管理师系列之四十一:项目组合管理
  4. 【WY】数据分析 — Matplotlib 阶段一 :基础语法 二 —— 创建图表
  5. 计算机毕业设计Java产品销售管理系统(源码+系统+mysql数据库+lw文档)
  6. Mixlab 创造力团队的中秋祝福
  7. android 日历自定义控件 ,包含 阴历 和 阳历
  8. 华为OD机试 -分苹果(JavaScript) | 机试题+算法思路+考点+代码解析 【2023】
  9. win10 映射网络磁盘导致资源管理异常情况
  10. 日元兑人民币用计算机怎么算,日元换算计算器(韩元换算人民币计算器)