zoukankan      html  css  js  c++  java
  • Android RecyclerView滚动类控件修改、去掉滑动边界的阴影效果

    前言

    滚动类控件,大家都用的很多,如 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> 
    

    去掉阴影效果

    但是有时候,我们想去掉这个阴影。方法也是很简单的,只需要调整控件的一个属性:overScrollModeneveroverScrollMode 顾名思义就是滑动即将超出边界时的模式,可以调整的属性有三种:

    • 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"
    

    希望能帮到有需要的同学~

  • 相关阅读:
    ajax 中$.each(json,function(index,item){ }); 中的2个参数表示什么意思?
    后台传list到前台,前台怎么解析,怎么将解析的数据填充到已经存在列名table中
    mybatis如何直接 执行传入的任意sql语句 并按照顺序取出查询的结果集
    虚拟机突然无法 联网,最简单及最可能的原因
    windows10,nodejs安装步骤
    Windows下Git与Node.js的安装
    Windows10下安装Git的详细教程
    django-admin.py startproject testdj 失败 没有工程文件夹
    在Pythonfor循环中如何获取循环次数?
    Pygal之世界地图绘制from pygal.i18n import COUNTRIES 报错的解决办法
  • 原文地址:https://www.cnblogs.com/DMingO/p/12789935.html
Copyright © 2011-2022 走看看