RecyclerView这个控件是为了替换Listview而产生的,但是这个控件在26之前版本都不支持快速滚动。如果需要使用需要借助于第三方比如FutureMind/recycler-fast-scroll或timusus/RecyclerView-FastScroll。
在RecycerView 26+版本支持了这个特性,大家终于不用在导入第三方或者在使用listview了。下面介绍下怎么使用以及坑的存在
在以前RecyclerView xml添加如下代码
xmlns:app="http://schemas.android.com/apk/res-auto"
app:fastScrollEnabled="true"
app:fastScrollHorizontalThumbDrawable="@drawable/thumb_drawable"
app:fastScrollHorizontalTrackDrawable="@drawable/line_drawable"
app:fastScrollVerticalThumbDrawable="@drawable/thumb_drawable"
app:fastScrollVerticalTrackDrawable="@drawable/line_drawable"
上面的4个Drawable都必须设置,不然就会异常
下面是xml代码
thumb_drawable 滚动条样式
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<size android:width="14dp" android:height="50dp"></size>
<corners android:bottomLeftRadius="2dp" android:bottomRightRadius="2dp" android:topLeftRadius="2dp" android:topRightRadius="2dp" />
<solid android:color="@android:color/holo_blue_light" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<size android:width="14dp" android:height="50dp"></size>
<corners android:bottomLeftRadius="2dp" android:bottomRightRadius="2dp" android:topLeftRadius="2dp" android:topRightRadius="2dp" />
<solid android:color="@android:color/darker_gray" />
</shape>
</item>
</selector>
line_drawable 滚动条背景样式
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!--<item-->
<!--android:state_pressed="true"-->
<!--android:drawable="@drawable/recycler_scroller_bg_line"/>-->
<!--<item-->
<!--android:drawable="@drawable/recycler_scroller_bg_line"/>-->
<shape android:shape="rectangle">
<size android:width="14dp"></size>
<padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
</shape>
</selector>
这里有一个坑
size android:width="14dp" android:height="50dp"
设置的宽度会起作用,但是高度没用,这个下面再说怎么解决
这个显示效果如下 借用别人的图
如果是新项目到这里基本就结束了,但是很多应用到这了坑才刚开始。因为默认的recyclerview 26是在support26中,而且compileSdkVersion 高于23
我们需要的是这样的,编译版本不能高于23,原因网上很多大家都知道的
compileSdkVersion 23
buildToolsVersion "25.0.3"
所以我们需要处理下这个引用包,添加引用
compile 'com.android.support:support-v4:26.0.2'
compile 'com.android.support:recyclerview-v7:26.0.2'
这样就可以单独引用recyclerview了,不会和其他冲突。这里注意一下我写的版本是26.0.2,这里并没有错,多数人添加后编译应该是提示找不到的。
这里介绍下这个坑的原因,google近期发布的support都放在了自家的库里,如果大家Gradle是3.0+,会发现里面有allprojects {
repositories {
…..
google()
…..
}
}
低于3.0这个解析不了。这里如果是老项目不要升级Gradle,不要升级Gradle,不要升级Gradle。
这个配置网上也有很多
这里给一个最简单的
在声明配置里面添加
maven {
url "https://dl.google.com/dl/android/maven2/"
}
再次更新编译 一切就ok了