Android 仿京东侧滑筛选

作者: 一花一朝 | 来源:发表于2017-02-11 17:11 被阅读2040次

    仿京东筛选

    • 简单介绍

    这个demo写的是仿京东的侧滑筛选页面,点击进入筛选后进入二级筛选,两次侧滑的筛选,还包括ListView+CheckBox滑动冲突,ListView+ GridView显示一行问题解决,接口回调传递数据等

    • 效果图
    这里写图片描述
    这里写图片描述
    这里写图片描述
    • 简单得代码介绍

    1.首页侧滑用的是安卓官方V4包中的DrawerLayout

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">
    
        <FrameLayout
            android:id="@+id/main_content"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true">
    
            <TextView
                android:id="@+id/screenTv"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center|top"
                android:layout_marginTop="200dp"
                android:text="仿京东筛选"
                android:textSize="20sp" />
        </FrameLayout>
    
        <LinearLayout
            android:id="@+id/nav_view"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="end"
            android:fitsSystemWindows="true"
            android:orientation="vertical" />
    
    </android.support.v4.widget.DrawerLayout>
    

    2.一级页面是自定义的layout,作为DrawerLayout的侧滑页面添加进去menuHeaderView = new RightSideslipLay(ScreeningActivity.this); navigationView.addView(menuHeaderView);
    发现的一个小的技巧想要侧滑不随滑动而滑动,只能点击才出现侧滑的话,可以先锁定
    drawer.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, Gravity.RIGHT);这样就不一直跟着手势侧滑了

    3.一级界面 ListVIew嵌套GridView,GridView得做自设配高度的自定义,不然只能显示一行,具体参源码AutoMeasureHeightGridView这个类

    4.接下来是解析数据绑定数据了,还算比较简单。定义模型类,京东的筛选默认每项显示数据3个即一行。我现在默认的是都是关闭的,只有第一项是打开的,默认显现9个即3行,点击查看更多就能进入下一级页面。参看图二

    5.二级页面是一个PopupWindow,设置了PopupWindow的位置和动画达到,也能像一级界面也样,右边侧滑出来,点击侧滑收回去的效果。`
    /**
    * 创建PopupWindow
    */
    private PopupWindow mMenuPop;
    public RightSideslipChildLay mDownMenu;

    protected void initPopuptWindow(List<AttrList.Attr.Vals> mSelectData) {
        mDownMenu = new RightSideslipChildLay(getContext(), ValsData, mSelectData);
        if (mMenuPop == null) {
            mMenuPop = new PopupWindow(mDownMenu, LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT);
        }
        mMenuPop.setBackgroundDrawable(new BitmapDrawable());
        mMenuPop.setAnimationStyle(R.style.popupWindowAnimRight);
        mMenuPop.setFocusable(true);
        mMenuPop.showAtLocation(RightSideslipLay.this, Gravity.TOP, 100, UiUtils.getStatusBarHeight(mCtx));
        mMenuPop.setOnDismissListener(new PopupWindow.OnDismissListener() {
    
            @Override
            public void onDismiss() {
                dismissMenuPop();
            }
        });
    }`
    

    此页面是一个ListView里包含CheckBox,对于CheckBox滑动选中错位的问题在这个demo中也有解决,此法一本万利。可以下载demo来参考。大体思路是CheckBox选中的状态对象的存在需要显示的对象里,设置对象的一个属性,记录CheckBox选中的状态。

    6.对于页面件数据的传递使用的接口回调。包括Adapter数据操作的传出和一级页面传入二级页面,二级页面在回传给一级页面显示。一级页面在传出给主页面(这个没有写)也可以用其他数据传递的方式,这只是方法之一。

    7.本人也是小菜鸟一枚,第一次使用markdown写博文,有啥不妥的地方欢迎留言讨论,项目下载地址:

    http://download.csdn.net/detail/qq_15795335/9752495

    原创博客,转载说明。记录自己成长的步伐!

    相关文章

      网友评论

      • 11ab97d68d02:你好我想问一下如何实现重置
      • 摩西wyh:你好,您的这个重置之后的如何去取消选中的背景色
      • 李小磊1992:你好:我想问下 你这demo 点击确定如何打印传进去的信息
        一花一朝:什么意思?你直接打log,没有信息输出吗?你也可以打断点调试

      本文标题:Android 仿京东侧滑筛选

      本文链接:https://www.haomeiwen.com/subject/tidoittx.html