【问题标题】:Android ExpandableListView inside ScrollView not expand full heightScrollView 内的 Android ExpandableListView 未展开全高
【发布时间】:2016-05-12 09:14:45
【问题描述】:

我正在开发一个带有左侧滑动菜单的 Android 应用,其中包含一些 LinearLayout 和中间的 ExpandableListview,就像这张图片一样

ExpandableListview 的子视图下面包含一个TextView 和一个ListView,ListView 的可见性默认是没有的。当点击TextView时,ListView将可见。

问题是当点击ExpandableListview 的父视图时,列表的高度也会扩大以包裹它的内容。但是当点击子视图(也是TextView)时,list'height 不会改变,我必须向下滚动才能看到最后一项。

为了在 ScrollView 中设置 ExpandableListview 的高度,我使用了以下代码:

public static void setListViewHeightBasedOnChildren(ListView listView) {
    ListAdapter listAdapter = listView.getAdapter();
    if (listAdapter == null) {
        // pre-condition
        return;
    }

    int totalHeight = listView.getPaddingTop() + listView.getPaddingBottom();
    for (int i = 0; i < listAdapter.getCount(); i++) {
        View listItem = listAdapter.getView(i, null, listView);
        if(listItem instanceof SecondLevelExpandableListView)
            Log.e("abc", "SecondLevelExpandableListView");
        if (listItem instanceof ViewGroup) {
            Log.e("abc", "ViewGroup");
            listItem.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        }
        listItem.measure(0, 0);
        totalHeight += listItem.getMeasuredHeight();
    }

    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
    listView.setLayoutParams(params);
}

问题截图

请帮我解决这个问题,我需要列表来包装它的内容。

提前致谢。

【问题讨论】:

    标签: android android-layout listview expandablelistview


    【解决方案1】:

    当你展开动画结束时, 叫这个:

    listView.smoothScrollTo(x,y);
    

    你可以通过 listView.getScrollY - maxY 在 Screen Seen 上找到 y

    【讨论】:

    • 没有。我的意思是列表视图总是显示所有项目并且不需要滚动。
    • 那你能再试试你的问题吗?
    • 我的问题是,当我单击 Texview 以显示下面的列表时, ExpanableListview 的高度不会扩展以包裹它的内容。我希望 ExpandableListview 的高度也像单击它的父视图时一样扩展。
    • 我更新了问题的截图,listview的高度没有延伸,内容被隐藏了
    • 您可以在这里阅读:stackoverflow.com/questions/6071131/…
    【解决方案2】:
    Use the Snippet for ExpandableListView
    
        import android.content.Context;
    import android.util.AttributeSet;
    import android.view.ViewGroup;
    import android.widget.ExpandableListView;
    
    public class ExpandableHeightListView extends ExpandableListView {
    
        boolean expanded = false;
    
        public ExpandableHeightListView(Context context) {
            super(context);
        }
    
        public ExpandableHeightListView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public ExpandableHeightListView(Context context, AttributeSet attrs,
                int defStyle) {
            super(context, attrs, defStyle);
        }
    
        public boolean isExpanded() {
            return expanded;
        }
    
        @Override
        public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            // HACK! TAKE THAT ANDROID!
            if (isExpanded()) {
                // Calculate entire height by providing a very large height hint.
                // But do not use the highest 2 bits of this integer; those are
                // reserved for the MeasureSpec mode.
                int expandSpec = MeasureSpec.makeMeasureSpec(
                        Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
                super.onMeasure(widthMeasureSpec, expandSpec);
    
                ViewGroup.LayoutParams params = getLayoutParams();
                params.height = getMeasuredHeight();
            } else {
                super.onMeasure(widthMeasureSpec, heightMeasureSpec);
            }
        }
    
        public void setExpanded(boolean expanded) {
            this.expanded = expanded;
        }
    }
    
    
    
    ****
    use <classpath for ExpandableHeightListView 
    attribs
    />
    
    *****
    ExpandableHeightListView expListView = (ExpandableHeightListView)findViewById(id);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-13
      相关资源
      最近更新 更多