ListView中动态显示和隐藏Header&Footer
解决思路: 直接设置HeaderView和FooterView.setVisibility(View.GONE)无效, 布局仍然存在, 需要给布局设置父布局, 然后通过控制子布局来显示隐藏布局.
1. 给最外层布局, 嵌套父布局, 通过控制子布局进而控制整个布局;
2. 给整个布局在代码中动态添加一个父布局, 然后头尾部添加父布局,可以直接操控该布局;
具体实现如下
话外篇:
1.什么是阴影效果 2.fading:渐变,衰退 fadingEdge:渐变边缘,衰退边缘 一、删除android ScrollView边界阴影方法方法 1) 在xml中添加:android:fadingEdge=”none” 2) 代码中添加:ScrollView.setHorizontalFadingEdgeEnabled(false); 二、删除ScrollView拉到尽头(顶部、底部),然后继续拉出现的阴影效果 适用于2.3及以上的 否则不用设置 android:overScrollMode="never"
除去ScrollVIew拉到尽头时再拉的阴影效果
如果需要动态的显示和隐藏footer的话,按照惯例,误以为直接通过setVisibility中的View.GONE就可以实现。但是在实际使用中发现并不是这样的。
例如,先加载footer布局:
private View mFooter; mFooter = LayoutInflater.from(this).inflate(R.layout.footer, null); //加载footer的布局 mListView.addFooterView(mFooter);
如果想动态隐藏这个footer,惯性思维是直接设置footer为gone:(其实这样做是不对的)
mFooter.setVisibility(View.GONE); //隐藏footer
实际上,直接设置GONE后,虽然元素是隐藏了,但是还是占用着那个区域,此时和View.INVISIBILE效果一样。
footer的正确使用方法如下:
1、方法一:
(1)布局文件:在footer布局文件的最外层再套一层LinearLayout/RelativeLayout,我们称为footerParent。
layout_footer_listview.xml:(完整版代码)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mFooterparent" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#FFFFFF" android:gravity="center" android:orientation="vertical" > <LinearLayout android:id="@+id/mFooter" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center"> <TextView android:layout_width="wrap_content" android:layout_height="40dp" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:gravity="center" android:text="查看更多" android:textColor="#ff0000" android:textSize="20sp"/> </LinearLayout> </LinearLayout>
(2)加载footer和footerParent的布局:
private View mFooter; //footer private View mFooterParent; //footer的最外面再套一层LinearLayout mFooterParent = LayoutInflater.from(getActivity()).inflate(R.layout.footerparent_listview, null);//加载footerParent布局 mFooter = mFooterParent.findViewById(R.id.footer); listView.addFooterView(mFooterParent); //把footerParent放到ListView当中 mFooterParent.setOnClickListener(MainActivity.this); //绑定监听事件,点击查看全部列表
(3)设置footer为gone:(不是设置footerParent为gone)
mFooter.setVisibility(View.GONE);
2、方法二:或者直接在代码中为footer添加footerParent也可以,如下:
private View mFooter; //footer mFooter = LayoutInflater.from(getActivity()).inflate(R.layout.footer_listview, null);//加载footer布局 LinearLayout mFooterParent = new LinearLayout(context); mFooterParent.addView(mFooter);//在footer的最外面再套一层LinearLayout(即footerParent) listView.addFooterView(mFooterParent);//把footerParent放到ListView当中
当需要隐藏footer的时候,设置footer为gone:(不是设置footerParent为gone)
mFooter.setVisibility(View.GONE);
时间: 2024-11-14 22:07:57