其中overlay是提示字母View的布局文件,如下:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="100dp" android:maxWidth="100dp" android:gravity="center"
android:textSize="55sp" android:textColor="#ffffffff"
android:background="@drawable/blue_bg" android:padding="10dp"
android:layout_margin="8dp" android:visibility="invisible" />

MainActivity中,onCreate方法如下:

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

mWindowManager = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, mStrings));
getListView().setOnScrollListener(this);
LayoutInflater inflate = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mDialogText = (TextView) inflate.inflate(R.layout.overlay, null);
mDialogText.setVisibility(View.INVISIBLE);
mHandler.post(new Runnable() {

public void run() {
mReady = true;
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
mWindowManager.addView(mDialogText, lp);
}});
}

首先像ListView中填充数据:

setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, mStrings));

加载首字母提示的View布局:

LayoutInflater inflate = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mDialogText = (TextView) inflate.inflate(R.layout.overlay, null);
mDialogText.setVisibility(View.INVISIBLE);
mHandler.post(new Runnable() {

public void run() {
mReady = true;
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
mWindowManager.addView(mDialogText, lp);
}});

注册滑动监听事件:

getListView().setOnScrollListener(this);

在滑动时间onScroll方法中,修改展示首字母提示:

if (mReady) {
char firstLetter = mStrings[firstVisibleItem].charAt(0);
if (!mShowing && firstLetter != mPrevLetter) {

mShowing = true;
mDialogText.setVisibility(View.VISIBLE);
}
mDialogText.setText(((Character)firstLetter).toString());
mHandler.removeCallbacks(mRemoveWindow);
mHandler.postDelayed(mRemoveWindow, 1000);
mPrevLetter = firstLetter;
}

mHandler.postDelayed(mRemoveWindow, 1000);

延迟一秒执行.项目源码见:http://bigcateasymorse.googlecode.com/svn/trunk/listview_fristletter/

更多相关文章

  1. Android(安卓)剪切板监听
  2. 其他小知识点
  3. Android(安卓)studio无法更新 提示网络连接失败
  4. 其他小知识点
  5. RecyclerView初级使用
  6. fullScreen时的软键盘监听(非重写Layout方式)
  7. eclipse新建android工程提示android.support.v7错误的解决办法
  8. android 传统蓝牙开发 (附示例源码)
  9. Android(安卓)自定义滑动解锁View

随机推荐

  1. Android(安卓)UI中的style和theme以及Ale
  2. Android应用程序组件Content Provider简
  3. Android(安卓)JNI/Hardware 加载(一)
  4. Android(安卓)手机无法连接mac解决办法
  5. Android中如何在命令行中查看某个文件的
  6. Android(Xamarin)之旅(三)
  7. Android(安卓)- R资源未找到至java文件报
  8. android 机顶盒开发-----GridView
  9. Android(安卓)EventBus 封装(支持多个粘性
  10. Android应用程序绑定服务(bindService)的过