[Android] ListView/GridView 滚动时动态填充空白边距padding(android:clipToPadding)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

【需求分析】

  最近项目中遇到这样一个需求,GridView在初始布局时有一个上面的padding。但是当滑动屏幕时,这个padding被动态填充,增大滑动区间和用户视觉区。折腾了好久,找到了相关属性android:clipToPadding可以进行设置。

【动画效果】

  这里需要的效果是:起初ListView具有上方的padding,而在用户手动滑动ListView后,上滑动的内容可以填充进这部分padding中,具体如下所示:
  android:android:clipToPadding=false

如果不对android:clipToPadding进行设置,得到的动画效果如下:
  android:android:clipToPadding=true
  此时,从动图中可以看出,ListView上方的padding一直存在于那边,并且当手动滑动listView时,item只是沿着padding的下边进行滑动,导致滑动后list_item和上面的actionBar好似分割开来了。通过添加android:clipToPadding=false这条属性,可以有效解决由于设置了padding导致的动态滑动分割影响

【实现方案】

  在ListView或者GridView中添加android:clipToPadding属性。

【代码展示】

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.baidu.dynamicpadding.MainActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:text="这是模拟出的actionBar"
        android:textColor="#0000FF"
        android:textSize="14sp"
        android:gravity="center"
        android:background="#FFFFFF"
        />

    <View
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:background="#000000"
        />

    <ListView
        android:id="@+id/test_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="20dp"
        android:paddingLeft="16dp"
        android:paddingRight="16dp"
        android:paddingBottom="20dp"
        android:background="#333333"
        android:clipToPadding="false"
        />
</LinearLayout>
public class MainActivity extends AppCompatActivity {

    private ListView listItems = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        listItems = (ListView) findViewById(R.id.test_list);
        List<String> datas = new ArrayList<>();
        for (int i = 0; i < 30; ++i) {
            datas.add(i, "item " + i);
        }
        ListAdapter adapter =
                new ListAdapter(MainActivity.this, R.layout.list_item, datas);
        listItems.setAdapter(adapter);
    }

    private class ListAdapter extends ArrayAdapter<String> {
        private int resourceId;

        public ListAdapter(Context context, int resourceId, List<String> datas) {
            super(context, resourceId, datas);
            this.resourceId = resourceId;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view;
            if (convertView == null) {
                view = LayoutInflater.from(getContext()).inflate(resourceId, null);
            } else {
                view = convertView;
            }

            TextView tvText = (TextView) view.findViewById(R.id.text_view);
            tvText.setText(getItem(position));
            return view;
        }
    }
}

【个人总结】

  1. 动态填充空白边距Padding:在ListView或者GridView中添加如下属性:
android:clipToPadding="false"

【原创声明】

转载请注册出处[个人博客地址](http://blog.csdn.net/csdn_lexli/article)
ListView的最后一行添加分割线 之前一直用笨办法,直接把ListView中的divider设置为空android:divider="@null",然后在Adapter的Item布局中自己在每一个Item下面画一条分割线,效果实现了,但是总觉得太农业化了,有没有更好的方案?当然是有的 阅读详情

相关推荐

Android clipToPadding 使用与疑难点解析

前言 ClipXX 系列: Android clipChildren 使用与疑难点解析 Android clipToPadding 使用与疑难点解析 上篇文章分析了clipChildren,说到它不得不提它的孪生兄弟clipToPadding,一看名字就大概猜得到这俩就是用来clip画布的,接下来本篇将详细分析之。 通过本篇文章,你将了解到: 1、clipToPadding 使用场景 2、clipToPadding 如何使用 3、clipToPadding 原理 4、clipToPadding 在Re

5853

android : clipToPadding clipChildren

1.android:clipToPaddingandroid:clipChildren是ViewGroup中的属性 2.android:clipToPaddingandroid:clipChildren默认为true, 3.一定是在布局文件的根节点设置,否则不起作用 setClipChildren 参考: Android clipToPadding和clipChildren属性使用 ...

火星男孩的分享空间 1944

android:clipToPadding属性的用法

属性说明在使用ListView或者RecycleView、ScrollView等滑动控件候有一个强大但隐秘的属性,在android的布局XML文件中,android:clipToPadding=“boolean”,该属性值可设为true或者false。表示控件的绘制区域是否在padding里面的

liugec的博客 7516

android:clipToPadding的使用详解

今天来记录一下我这么久以来困扰的一个问题,就是有候我们在listview设计会有一些内的要求,这候就比较尴尬,有人说直接用padding不就可以解决这个问题了吗?但是用完后有人发现在上下拉动整个内容会看到有一个白色的内在那里,非常的丑,这候我们就需要用到Listview的一个强大的属性:android:clipToPadding=false,默认android:clipToPadding=true的。 下面我来解释一下它的具体用途 clipToPadding: 就是说控件的绘制区域是否在p

农村打工仔的博客 1151

android:cliptopadding="false",android:clipToPaddingandroid:clipChildren

**android:clipToPadding **设置该控件的绘制范围是否在Padding里面。当clipToPadding为true,布局不能绘制到padding区域。当clipToPadding为false,表示布局能够被绘制到padding区域。默认clipToPadding为true。具体举例:当我们为ListView、ScrollView、GridView设置了paddingTop...

weixin_40000702的博客 1082

android:clipToPadding=“false“的使用

当Recyclerview设置padding了,希望列表滚动,内容可以渲染到顶部和底部的padding区域,可以使用设置。

zhifanxu的专栏 756

Android 设置与外部控件(setPadding 和setMargin的使用)

在设计UI过程中,想使图片处于屏幕的特定位置,但发现图片总是在顶端。 解决办法:使用setPadding和setMargin

SHENMEGUI_32的博客 2万+

设置padding后在滑动覆盖padding区域

有没有遇到过这样的需求,在滑动到头的候添加一个。在滑动添加padding依然需要填充。 只需要在代码中添加如下代码即可(默认为true): android:clipToPadding="false" 还有一个,就是如果子view大于parent的候,是否要裁剪, clipchildren表示是否裁剪子View,当此属性的值为false,子View的大小可以超过父View的大小。 an...

lixinxiaos的博客 1426

css实现贴合滚动

css实现贴合滚动

paidaboluo的博客 759

clipToPadding和clipChildren使用说明

1、clipToPadding clipToPadding默认为true,当clipToPadding为true,表示布局不能绘制到padding区域。当clipToPadding为false,表示布局能够被绘制到padding区域。 效果展示: 设置为true,默认状态下为true。 设置为false 在滚动候,可以很明显的看到绘制布局的绘制区域差别,设置为true的话,绘制区域高度...

步行者 1925

微信小程序,容器横向滚动,设置padding,真机上只padding-left生效了,padding-right紧贴父容器

微信小程序,容器横向滚动,设置padding,真机上只padding-left生效了,padding-right紧贴父容器

wuxuan_的博客 662

android:cliptopadding="false",Android布局属性android:clipToPadding的UI设计妙用

Android布局属性android:clipToPadding的UI设计妙用一个简单的UI效果场景。顶部一个半透明Toolbar,然后下面是一个ListView,要求ListView在初始状态下(即未触发任何滑动事件情况下)的item全部在Toolbar下面显示,当用户的手指由下往上滑动翻动候,ListView的item滚动到Toobar下面。这样的抽象描述比较晦涩难懂,现在给出两张图加以说明...

weixin_42503660的博客 519

HTML 页面滚动,部分内容位置固定不滚动

HTML 页面滚动,部分内容位置固定不滚动 效果截图: 页面源代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>无标题页</title> </head> <body style="width: 900px; ma...

肖朋伟 1万+

qt creator 布局

qt creator 布局 https://www.bilibili.com/video/BV1XW411x7NU?p=25 网格布局,可以任意布局 弹簧的用法

abc 558

AndroidListView在addFooterView,搜索显示空白行、空白框问题

AndroidListView在addFooterView,搜索显示空白行、空白框问题 如题:       正常显示并无问题,未选定也搜索也不会出现问题,但是onItemLongClick后在搜索框无法匹配不不到,会出现上述问题   发现是添加footer行引入的,但是footer也不能去掉;百度后发现addFooter后,adapter会变大,且当list内容发

yun00710的专栏 644

AndroidListView添加FooterView再remove掉,会留下空白位置

在使用ListView的footer的过程中,如果需要动态的显示和隐藏footer的话,需要给footer添加一个layout或者是父级的view,通过控制父级view的显隐来动态显示或隐藏footer。

Hmy的博客 1195

Android 如何在xmL 里面动态设置padding

如题,Android 如何在xmL 里面动态设置padding候,你的布局加载完成之后,你findViewByid 找到控件,设置padding 会导致白条,布局闪动,那怎么办呢? 你是不是就想,在xml里面就设置好padding? 但是,Android 直接是不支持的。 只能迂回一下。我们思路就是,把一个自定义view 扔到xml 里面,自定义view 里面 动态获取你的paddi

男儿不展风云志,空有天生八尺躯 1487

安卓RecyclerView和ExpandListView底部留白

自从工作以后加班情况很常见,没什么间写博客了,今天的博客写于晚上十二点半,好了开始正题。 今天需求里有这样一项,给RecyclerView和ExpandListView添加底部留白,我一开始想的是直接在父布局中添加一个Space,但是结果不如人意,你们可以试试。也想过使用footerView,RecyclerView可以直接添加,但是ExpandListview 不能直接添加footerView(和他们继承的父类有关),而且这里用footView确实是大材小用了。也看到网友一些建议,为数据集添加一项空数据

timekeeper 2006

android 如何动态设置View的margin和padding

1.动态设置padding,拿ImageView为例:ImageView imageView = new ImageView(this); imageView.setPadding(5,5,5,5) 2.动态设置margin 拿LinearLayout里放ImageVIew例: LinearLayout layout = (LinearLayout) convertView.findV

a107494639的专栏 5万+
上一篇: [Android] Android Studio提升效率的技巧,持续更新~
下一篇: [Android] SeekBar 基本使用
csdn_lexli
博客等级 码龄10年 5粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值