我正在使用找到here的教程创建自定义ExpandableListView
以支持三个级别。
我按预期使列表正常工作并进行扩展/折叠。
我遇到的问题是,当用户按下某个项目时,android只识别每个项目的一部分作为可点击区域,并且该区域是选中时突出显示的唯一部分。
如果您运行教程代码,或者查看下面的图像,则第二级和第三级背景应占据整个宽度,就像第一级一样。
我已经尝试在LayoutParams
上设置TextView
这个名为tv的电视:
tv.setLayoutParams(new ListView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
我希望背景和突出显示在每个级别上占据视图的整个宽度。
我的所有代码都遵循本教程,但如果有帮助,我可以发布特定的部分。
编辑:添加图片
答案 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
,以便第二个可扩展列表可以使用其子项所需的空间。