ListView/RecyclerView/ScrollView
2016-09-09 本文已影响3804人
ZhanChiFF
前段时间项目中用到了ListView,做出来后看效果,发现ListView原生的scrollbar是这样的:
图1
看上去很low的感觉,和项目整体的风格格格不入。于是想反办法将其改掉。
通过查看View属性,决定scrollbar的属性是android:scrollbarThumbVertical,这个属性是存在于View当中的,也就是说所有View,ViewGroup都能设置scrollbar。
好了,废话不多说,直接上效果图:
图2
再来看达到这个效果所需要的代码,在布局中:
<ListView
android:id="@+id/test_listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbarThumbVertical="@drawable/my_bar"/>
再来看drawable目录下的my_bar.xml:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#999999"/> <!--设置颜色-->
<size android:width="4dp"/> <!--设置宽度-->
</shape>
这么简单就实现啦!
什么?没有边框?没有圆角?
那么加上就是了,不就是个属性嘛:
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#999999"/>
<size android:width="4dp"/>
<corners android:radius="2dp"/>
<stroke android:color="#111111" android:width="2px"/>
</shape>
再来看看效果:
图3
我们再来和系统原生的scrollbar比较比较,发现原生的和右边边界有1px或2px的距离,而我们自定义的和右边是挨着的(在本文的图片中不好看出来,在真实的手机上能明显看到)。那么怎样才能达到那样的效果呢?
经过艰苦查找,终于发现了解决方法,将my_bar.xml稍作修改即可:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:right="5dp">
<shape>
<solid android:color="#999999"/>
<corners android:radius="2dp"/>
<stroke android:color="#111111" android:width="2px"/>
<size android:width="4dp"/>
</shape>
</item>
</layer-list>
来看看效果图:
图4
什么?感觉太远?那自己改一下数值大小就行:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:right="1dp">
<shape>
<solid android:color="#999999"/>
<corners android:radius="1dp"/>
<stroke android:color="#111111" android:width="1px"/>
<size android:width="2dp"/>
</shape>
</item>
</layer-list>
再看看效果:
是不是很有IOS风,_