zoukankan      html  css  js  c++  java
  • Android--------解决ScrollView中嵌套ExpandableListView显示不全的问题

    ##***Scrollview和ExpandableListView嵌套显示不全***

    - 当我们将ExpandableListView嵌套在Scrollview之中时,我们必须要确保我们的不居中ExpandableListView在最后


    - 在OnCreate()方法中要用到的代码

        mListView = (ExpandableListView) findViewById(R.id.activity_expandable_list_view);
            MyExpandableListAdapter adapter = new MyExpandableListAdapter(this,
                    mGroups);
            mListView.setAdapter(adapter);
            mListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
     
                @Override
                public boolean onGroupClick(ExpandableListView parent, View v,
                                            int groupPosition, long id) {
                    setListViewHeight(parent, groupPosition);
                    return false;
                }
            });


    - 还必须用到的方法如下:

    其中,group为一级条目当前的位置,如果不是在onGroupClick()方法中调用,则不用传group参数,也不做if判断。

        /**设置listview的高度,解决嵌套在ScrollView中显示不全的问题*/

        private void setListViewHeight(ExpandableListView listView, int group){
            //得到相应ListView的适配器
            ExpandableListAdapter listAdapter = listView.getExpandableListAdapter();
            //总高度
            int totalHeight = 0;
            //期望的宽度
            int desiredWidth = View.MeasureSpec.makeMeasureSpec(listView.getWidth(), View.MeasureSpec.EXACTLY);
            for (int i = 0; i < listAdapter.getGroupCount(); i++) {
                //得到一级条目
                View groupItem = listAdapter.getGroupView(i, false, null, listView);
                //groupItem根据给的参数测量一下尺寸,方法调用完后groupItem大小就确定了
                groupItem.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
                //累加一级条目高度
                totalHeight += groupItem.getHeight();
                //    除了group条目外都展开了  或者  group那一条目没有展开
                if (((listView.isGroupExpanded(group))&&(i!=group)) ||((!listView.isGroupExpanded(group))&&(i == group)) ) {
                    for (int j = 0; j < listAdapter.getChildrenCount(i); j++) {
                        //得到二级条目
                        View listItem = listAdapter.getChildView(i, j, false, null, listView);
                        //listItem根据给的参数测量一下尺寸,方法调用完后listItem大小就确定了
                        listItem.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED);
                        //累加二级条目高度
                        totalHeight += listItem.getHeight();
                    }
                }
            }
            //获得listView的布局参数
            ViewGroup.LayoutParams params = listView.getLayoutParams();
            //listView的高度 = 一级条目和二级条目总和 + 分割线高度总和
            int height = totalHeight + (listView.getDividerHeight()*(listAdapter.getGroupCount() - 1));
            //如果高度小于10,则设置为200,没有太大关系
            if(height < 10){
                height = 200;
            }
            //把高度赋值给布局参数
            params.height = height;
            //把布局参数回传给listView
            listView.setLayoutParams(params);
            //listView按照参数从新布局
            listView.requestLayout();
        }

    绳锯木断,水滴石穿。海纳百川,积少成多。一分耕耘,一份收获。
  • 相关阅读:
    StringUtils 之 hasLength()
    XML命名空间详解
    Spring bean属性 abstract、parent
    Springboot thymeleaf <thymeleaf‐layout‐dialect.version>2.2.2</thymeleaf‐layout‐dialect.version>标签导入报错
    Springboot 处理静态资源
    git命令
    nftables--linux
    debian handbook手册
    tcp和ip header
    linux内核参数-rp_filter
  • 原文地址:https://www.cnblogs.com/tittles0k/p/5630760.html
Copyright © 2011-2022 走看看