Android中实现ListView滑动首字母提示 .
16lz
2021-12-04
其中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/
<?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/
更多相关文章
- Android(安卓)剪切板监听
- 其他小知识点
- Android(安卓)studio无法更新 提示网络连接失败
- 其他小知识点
- RecyclerView初级使用
- fullScreen时的软键盘监听(非重写Layout方式)
- eclipse新建android工程提示android.support.v7错误的解决办法
- android 传统蓝牙开发 (附示例源码)
- Android(安卓)自定义滑动解锁View