MultiLevel ExpandableListView无法正确突出显示

时间:2014-07-21 15:37:24

标签: android expandablelistview

我正在使用找到here的教程创建自定义ExpandableListView以支持三个级别。

我按预期使列表正常工作并进行扩展/折叠。

我遇到的问题是,当用户按下某个项目时,android只识别每个项目的一部分作为可点击区域,并且该区域是选中时突出显示的唯一部分。

如果您运行教程代码,或者查看下面的图像,则第二级和第三级背景应占据整个宽度,就像第一级一样。

multilevel expandablelistview

我已经尝试在LayoutParams上设置TextView这个名为tv的电视:

tv.setLayoutParams(new ListView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

我希望背景和突出显示在每个级别上占据视图的整个宽度。

我的所有代码都遵循本教程,但如果有帮助,我可以发布特定的部分。

编辑:添加图片

1 个答案:

答案 0 :(得分:2)

如果有人也需要,我找到了解决这个问题的方法。

CustExpListView课程中,您需要覆盖onMeasure方法。

本教程以这种方式显示:

@Override    
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    widthMeasureSpec = MeasureSpec.makeMeasureSpec(960, MeasureSpec.AT_MOST);
    heightMeasureSpec = MeasureSpec.makeMeasureSpec(600, MeasureSpec.AT_MOST);
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

然而,这只会使用尽可能多的宽度来适应文本,因此不会突出显示整个条形。要解决此问题,请将onMeasure方法更改为:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
    widthMeasureSpec = MeasureSpec.makeMeasureSpec(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY);
    heightMeasureSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE, MeasureSpec.AT_MOST);
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}

这总是将宽度指定为widthMeasureSpec的宽度,如果您将LayoutParams设置为MATCH_PARENT,则会填充您的视图。高度使用Integer.MAX_VALUE,以便第二个可扩展列表可以使用其子项所需的空间。