如何使用自定义ExpandedListView垂直扩展或填充屏幕

时间:2016-05-10 13:03:31

标签: android android-layout expandablelistview

我有一个自定义的3级ExpandableListView,其中包含2个自定义ExpandableListAdapter

ParentAdapter内部getChildView我创建了一个CustomExpandableListView的实例,并将ChildAdapter设置为:{/ p>

@Override
public View getChildView(int groupPosition, int childPosition,
                         boolean isLastChild, View convertView, ViewGroup parent) {

    CustomExpandableListView subObjects = (CustomExpandableListView) convertView;

    if (convertView == null) {
        subObjects = new CustomExpandableListView(activity);
    }
    ChildAdapter adapter = new ChildAdapter(activity, item, subObjects);
    subObjects.setAdapter(adapter);

    return subObjects;
}

一些屏幕截图:

这是我隐藏中国地区时得到的结果:

Collapsed list

这一点在扩展时:

Expanded list

所以我的ExpandableListView仅占用了屏幕的一部分(我用红线标记了它),其他东西消失了,我必须滚动才能看到它。只有当我向Lvl 1(亚洲和欧洲)添加元素时,我的列表才会垂直扩展。我理解为什么 - 因为它们是标准ExpandableListView

的元素

我知道如何删除上边距和左边距 - 我在布局中设置了填充。

但是我如何强迫CustomExpendableListView垂直展开呢?

这是我的CustomExpendableListView:

public class CustomExpandableListView extends ExpandableListView {

public CustomExpandableListView(Context context) {
    super(context);
}

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    widthMeasureSpec = MeasureSpec.makeMeasureSpec(990, MeasureSpec.AT_MOST);
    heightMeasureSpec = MeasureSpec.makeMeasureSpec(1600, MeasureSpec.AT_MOST);
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}

在我的activity_main布局中,我只有一个RelativeLayout,宽度和高度都处于match_parent状态。

这是我在 MainActivity中初始化CustomExpandableListView的方法:

RelativeLayout parent = (RelativeLayout) findViewById(R.id.relativeContainer);
    list = new CustomExpandableListView(this);
    ParentAdapter adapter = new ParentAdapter(this, objectsLvl1);
    list.setAdapter(adapter);

1 个答案:

答案 0 :(得分:0)

嗯,实际上我找到了一些解决方案。

我已将ExpandableListView放入RelativeLayout activity_main内。{/ p>

改变了 MainActivity:

中的实现
ExpandableListView list = (ExpandableListView) findViewById(R.id.expandableListView_Parent);

    if (list != null) {
        ParentAdapter adapter = new ParentAdapter(this, objectsLvl1);
        list.setAdapter(adapter);
    }

这解决了我的问题,现在我有一个全屏ExpandableList

但如果有人告诉我如果我想通过自己的CustomExpandableList做什么,那将会很好。因为我仍然不知道该怎么做。