欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ScrollView包裹ExpanableListView显示不全问题,简单有效的解决方法

程序员文章站 2022-05-31 10:07:26
...

       最近需要搞一个三级菜单,最开始是打算用ExpandableListView包裹ExpandableListView实现的,粗略写完后发现直接崩溃了,方法应该是可以的,但还需要时间去调试,因为时间有点赶,我就直接用了ScrollView和ExpandableListView搭配,通过addView的动态方式,算是实现了这个三级菜单,因为这个方式View的可复用性实在太差,我做完也没有花时间模仿重用View进行优化,所以这个就分享出来了。
        主要是说一下ScrollView包裹ExpanableListView显示不全问题的解决方法。
        正常直接将ExpandableListView放进ScrollView里面,一般只有第一个groupItem可以看到
 

<ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="none">

        <ExpandableListView
            android:id="@+id/lvTest"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
        </ExpandableListView>
        
</ScrollView>

出来的效果就是这样
 

ScrollView包裹ExpanableListView显示不全问题,简单有效的解决方法

最简单的解决方法就是重写ExpandableListView的onMeasure方法
 

package cn.ALeeCJ.learningproject.scrollview_expandablelistview_test;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ExpandableListView;

public class ResolveDisplayProblemExpandableListView extends ExpandableListView {
    public ResolveDisplayProblemExpandableListView(Context context) {
        super(context);
    }

    public ResolveDisplayProblemExpandableListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public ResolveDisplayProblemExpandableListView(Context context, AttributeSet attrs,
                                                   int defStyle) {
        super(context, attrs, defStyle);
    }

    //重写这个方法,即可解决ScrollView包裹ExpandableListView显示不全问题
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
}

之后布局文件换成重写方法后的ExpandableListView(我这就是ResolveDisplayProblemExpandableListView)

<ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="none">

        <cn.ALeeCJ.learningproject.scrollview_expandablelistview_test.ResolveDisplayProblemExpandableListView
                android:id="@+id/lvTest"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
        </cn.ALeeCJ.learningproject.scrollview_expandablelistview_test.ResolveDisplayProblemExpandableListView>

</ScrollView>


十分的简单,在这就不多哔哔了,直接看效果图
 

ScrollView包裹ExpanableListView显示不全问题,简单有效的解决方法

到这里就结束了。