使用ListView FastScroller,默认滑块和自定义滑块图片的样子如下两图:
设置快速滚动属性很容易,只需在布局的xml文件里设置属性即可:
<ListView android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fastScrollEnabled="true"
android:focusable="true" />
但是有时候会发现设置属性无效,滚动ListView并未出现滑块。原因是该属性生效有最小记录限制。当ListView记录能够在4屏以内显示(也就是说滚动4页)就不会出现滑块。可能是api设计者认为这么少的记录不需要快速滚动。
依据是android源代码,见FastScroller的常量声明:
// Minimum number of pages to justify showing a fast scroll thumb
private static int MIN_PAGES = 4;
以及:
// Are there enough pages to require fast scroll? Recompute only if total count changes
if (mItemCount != totalItemCount && visibleItemCount > 0) {
mItemCount = totalItemCount;
mLongList = mItemCount / visibleItemCount >= MIN_PAGES;
}
通篇查看了ListView及其超累AbsListView,都未找到自定义图片的设置接口。看来是没打算让开发者更改了。但是用户要求我们自定义这个图片。那只能用非常手段了。
经过分析发现,该图片是ListView超类AbsListView的一个成员mFastScroller对象的成员mThumbDrawable。这里mThumbDrawable是Drawable类型的。mFastScroller是FastScroller类型,这个类型比较麻烦,类的声明没有modifier,也就是default(package),只能供包内的类调用。
因此反射代码写的稍微麻烦一些:
try {
Field f = AbsListView.class.getDeclaredField("mFastScroller");
f.setAccessible(true);
Object o=f.get(listView);
f=f.getType().getDeclaredField("mThumbDrawable");
f.setAccessible(true);
Drawable drawable=(Drawable) f.get(o);
drawable=getResources().getDrawable(R.drawable.icon);
f.set(o,drawable);
Toast.makeText(this, f.getType().getName(), 1000).show();
} catch (Exception e) {
throw new RuntimeException(e);
}
分享到:
相关推荐
5. **ListView样式调整**:除了单个项的圆角效果,还可以通过修改ListView本身来增强整体视觉效果。例如,可以通过设置`android:listSelector`属性来自定义选中项的背景,或者通过`android:divider`和`android:...
在Android开发中,ListView是一种常用的UI组件,用于展示大量数据列表。它允许用户滚动查看内容,同时提供了多种交互方式,如点击、长按等。在本示例中,我们将探讨如何实现一个支持多选功能的ListView,即"android...
- **BaseAdapter**:这是自定义ListView样式的核心,你需要创建一个继承自BaseAdapter的类。在这个类中,你需要实现`getCount()`(返回列表项的数量)、`getItem(int position)`(获取指定位置的数据)、`getItemId...
本篇将详细介绍如何在Android中利用ListView实现表格样式的界面。 首先,理解ListView的基本原理是至关重要的。ListView依赖于Adapter来提供数据,它会根据Adapter返回的数据项数量动态创建视图(View)。为了实现...
在Android开发中,ListView和GridView是两种常用的布局控件,它们各自有其特定的应用场景。...在实际开发中,可以根据需求调整ListView和GridView的样式、布局以及数据处理方式,以满足各种不同的设计需求。
在Android开发中,ListView是一种非常常见的控件,用于展示大量数据列表。然而,有时我们不仅需要展示单一列表,还可能需要实现类似表格的效果,比如显示多列数据。本篇文章将详细讲解如何在Android中利用ListView...
在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。在实际应用中,我们经常需要根据需求定制ListView,比如改变不同列表项(item)的字体颜色。标题"android 修改listview的不同item字体的颜色...
在Android开发中,ListView是一种非常常见且重要的组件,它用于展示大量的数据列表,例如新闻、联系人、邮件等。在本教程中,我们将深入探讨如何利用ListView来浏览新闻。ListView的优势在于它可以动态加载数据,...
在Android开发中,ListView是一种非常常见的控件,用于展示大量数据列表。而“悬浮bar”(Floating Bar)则是在ListView滚动时始终固定在屏幕顶部或底部的导航栏,它可以提供筛选、分组等功能,增强用户体验。这个...
在Android应用开发中,ListView是常用的控件,用于展示大量数据列表。本示例将深入讲解如何在ListView中实现图片和文字的结合显示,以增强用户体验。我们将使用Android Studio 3.1.4进行开发。 首先,理解ListView...
在Android开发中,ListView是一种非常常见的控件,用于展示大量数据列表。它的网格布局模式使得数据以多列的形式展示,增强了界面的可读性和用户体验。本文将深入探讨如何在Android中实现一个基于ArrayAdapter的网格...
在Android开发中,ListView是一种常用的组件,用于展示可滚动的多行数据列表。要改变ListView选中行的字体颜色和图片,我们需要理解ListView的工作原理,以及如何自定义其Adapter和视图。以下是一些关键知识点的详细...
要实现透明状态栏,可以在主题样式中设置`<item name="android:windowTranslucentStatus">true</item>`。同时,为了防止内容被状态栏遮挡,可以使用`fitsSystemWindows="true"`属性。然而,对于不同的Android版本,...
在Android开发中,ListView是一种非常重要的控件,用于展示大量数据列表。它的每个Item(列表项)通常由一个布局资源文件XML定义,这样可以灵活地设计每个列表项的外观和内容。下面我们将深入探讨如何使用XML文件来...
在Android开发中,ListView是一种常用的UI控件,用于展示大量数据列表。然而,要实现一个树形结构,即节点有层级关系的数据展示,就需要进行一些定制化的工作。本篇文章将详细探讨如何在不继承`ListActivity`而是...
在Android开发中,ListView是一种非常重要的控件,它允许我们展示大量的数据并支持滚动操作,非常适合用来构建诸如消息列表、联系人列表等场景。在这个"Android:ListView实现QQ列表"的实践中,我们将深入理解如何...
在Android开发中,ListView是一种常用的组件,用于展示大量的数据列表。它可以高效地处理大量数据,因为只有当前可视的项才会被加载到内存中。在这个场景中,我们将关注如何在ListView中实现不同类型的Item布局,...
在Android开发中,ListView是一种非常常用的控件,用于展示大量数据列表。自定义ListView不仅可以满足基本的显示需求,还能提供更丰富的交互体验。本篇文章将深入探讨如何在Android中实现自定义ListView,以及如何在...
在Android开发中,ListView是一个非常重要的组件,它用于展示大量数据列表,通常用于实现像联系人列表、消息列表等常见的用户界面。ListView通过高效的滚动性能和可复用的视图来优化内存使用,使得在有限的内存条件...
在给定的标题“android基于ListView实现的滚轮选择器”中,我们可以理解到这个实现是利用了ListView这一核心组件来构建滚轮效果。下面将详细解释如何使用ListView实现滚轮选择器,以及可能遇到的关键技术和优化点。 ...