您的位置:首页 > 移动开发 > Android开发

[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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐