【问题标题】:MultiLevel ExpandableListView not highlighting properlyMultiLevel ExpandableListView 未正确突出显示
【发布时间】:2014-07-21 15:37:23
【问题描述】:

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

我的列表按预期工作和展开/折叠。

我遇到的问题是,当用户按下一个项目时,android 只会将每个项目的一部分识别为可点击区域,而该区域是唯一在选择时突出显示的部分。

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

我已经尝试在我的TextView 上设置LayoutParams,就像这样:

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

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

我的所有代码都遵循教程,但如果有帮助,我可以发布具体的代码。

编辑:添加图片

【问题讨论】:

  • 我已经找到了解决方案,并会在 SO 允许时发布(我现在没有足够的声誉来回答我自己的问题)

标签: android expandablelistview


【解决方案1】:

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

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,以便第二个可扩展列表可以为其子级使用尽可能多的空间。

【讨论】:

    猜你喜欢
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 2014-05-19
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多