滚动类控件,大家都用的很多,如 RecyclerView、NestedSrollView…
下面以recyclerView为例讲解,其他滚动控件也同理。
前言
RecyclerView 滚动列表,谷歌爸爸在设计这个控件时候,在滑动到边界时,默认给我们加上了阴影,谷歌设计的本意呢应该是给提示用户列表滑动已经到边缘了,如图:
修改阴影效果的颜色
阴影效果的颜色,其实是由你的项目中styles.xml
中的AppTheme
的theme定义的colorPrimary这个id的颜色控制的,当我们不指定阴影效果的颜色时,RecyclerView会自动获取R.color.colorPrimary
的颜色。也就是说只要在colors.xml
中修改colorPrimary对应的颜色值就可以了。要注意的不能修改这个id命名,不然可能会影响其他控件的表现
<!-- styles.xml -->
<style name = "AppTheme" parent = "Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name = "colorPrimary">@color/colorPrimary</item>
<item name = "colorPrimsaryDark">@color/colorPrimaryDark</item>
<item name = "colorAccent">@color/colorAccent</item>
</style>
------------------------------------------------------------------------
<!-- colors.xml -->
<color name = "colorPrimary">#FFA958</color>
去掉阴影效果
但是有时候,我们想去掉这个阴影。方法也是很简单的,只需要调整控件的一个属性:overScrollMode
为 never
,overScrollMode
顾名思义就是滑动即将超出边界时的模式,可以调整的属性有三种:
- never: 完全去掉滑动边界的阴影效果
- always: 总是出现滑动边界的阴影效果
- ifContentScrolls:
- 如果recycleview里面的内容可以滑动,那么滑到边界后继续滑动会出现滑动边界的阴影效果
- 如果recycleview里面的内容不可以滑动,那么滑到边界后继续滑动不会出现滑动边界的阴影效果
只要在xml或者在View层代码中设置了就可以生效。不过要注意,View层代码一般来说优先级会比xml定义属性优先级要高。
设置完全去掉阴影效果的示例代码如下:另外两个效果也是同理~
//xml代码中设置
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:overScrollMode="never"
/>
//在java/kotlin代码里面修改
recyclerview.setOverScrollMode(RecyclerView.OVER_SCROLL_NEVER);
设置后,便能消除这个RecyclerView滑动边界的阴影效果了。
去掉滚动条
这里顺带一提,滚动控件如何去掉它的滚动条,只需要调整一个属性
android:scrollbars="none"
希望能帮到有需要的同学~