[Android] ListView/GridView 滚动时动态填充空白边距padding(android:clipToPadding)
2016-09-13 23:27
896 查看
【需求分析】
最近项目中遇到这样一个需求,GridView在初始布局时有一个上面的padding。但是当滑动屏幕时,这个padding被动态填充,增大滑动区间和用户视觉区。折腾了好久,找到了相关属性android:clipToPadding可以进行设置。【动画效果】
这里需要的效果是:起初ListView具有上方的padding,而在用户手动滑动ListView后,上滑动的内容可以填充进这部分padding中,具体如下所示:如果不对android:clipToPadding进行设置,得到的动画效果如下:
此时,从动图中可以看出,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<S a705 tring> { 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; } } }
【个人总结】
动态填充空白边距Padding:在ListView或者GridView中添加如下属性:android:clipToPadding="false"
【原创声明】
转载请注册出处[个人博客地址](http://blog.csdn.net/csdn_lexli/article)
相关文章推荐
- android:clipToPadding属性的分析——以ListView的"别样"padding为例
- Android 去掉ListView/GridView下拉出空白回弹的效果,以及使用PullToRefresh出现的问题
- listView及ScrollView等PadingTop显示问题:android:clipToPadding="false"
- listView及ScrollView等PadingTop显示问题:android:clipToPadding="false"
- android:clipToPadding属性的分析——以ListView的"别样"padding为例
- Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向 推荐
- Android ListView GridView添加 padding后padding部分不跟随滑动移动问题解决方案
- Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
- android 多个listView的向下滚动设置 listView动态设置高度代码
- Android研究之手PullToRefresh(ListView GridView 下拉刷新)使用具体解释
- Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
- Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
- Android进阶篇之ListView、GridView以及ScrollView实现按钮控制滚动
- Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
- Android中对GridView, ListView等滚动控件的Touch事件onInterceptTouchEvent,onTouchEvent了解
- Android ListView,Gridview动态加载释放图片资源
- Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
- Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向
- Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向
- Android PullToRefresh (ListView GridView 下拉刷新) 使用详解