ScrollView嵌套ListVIew/GridView显示问题

  ScrollView嵌套ListView/GridView的显示问题可以说是安卓开发者都会遇到的问题,同时处理起来也比较麻烦,最近也遇到了这种问题,在这整理一下做个记录。

1、对于ListView最常用的就是动态的根据Adapter来计算列表的高度,在设置完列表之后调用一下对应的计算方法即可:

/**
     * 动态设置ListView的高度
     *
     * @param listView
     */
    public static void setListViewHeightBasedOnChildren(ListView listView)
    {
        if (listView == null)
            return;
        ListAdapter listAdapter = listView.getAdapter();
        if (listAdapter == null)
        {
            // pre-condition
            return;
        }
        int totalHeight = 0;
        for (int i = 0; i < listAdapter.getCount(); i++)
        {
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(0, 0);
            totalHeight += listItem.getMeasuredHeight();
        }
        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
    }

该方法是目前比较流行的解决ListView与ScrollView冲突的方案

2、重写ListView与GridView

重写ListView:

public class MyListView extends ListView {  

    public MyListView(Context context) {
        // TODO Auto-generated method stub
        super(context);
    }  

    public MyListView(Context context, AttributeSet attrs) {
        // TODO Auto-generated method stub
        super(context, attrs);
    }  

    public MyListView(Context context, AttributeSet attrs, int defStyle) {
        // TODO Auto-generated method stub
        super(context, attrs, defStyle);
    }  

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // TODO Auto-generated method stub
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
}

重写GridView

public class MyGridView extends GridView
{
    public MyGridView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

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

    public MyGridView(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
    }

    @Override
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {

        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
时间: 2024-12-08 23:43:48

ScrollView嵌套ListVIew/GridView显示问题的相关文章

一键解决ScrollView嵌套ListView仅仅显示一行的问题

/** * 解决ScrollView嵌套ListView仅仅显示一行的问题 * * @param listView */ private void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return; } int totalHeight = 0; for (int i = 0;

Android中ScrollView嵌套ListView只显示一行的解决方案

Android中ScrollView嵌套ListView只显示一行的解决方案 解决方案1: 直接把包含ListView控件的ScrollView控件从布局文件中去除,留下ListView控件,这是最简单快捷的解决办法. 如果一定要在ScrollView中包含ListView,则参考 解决方案2: public void showlist() { List<HashMap<String, String>> dataHashMaps = new ArrayList<HashMap

一键解决ScrollView嵌套ListView只显示一行的问题

/** * 解决ScrollView嵌套ListView只显示一行的问题 * * @param listView */ private void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return; } int totalHeight = 0; for (int i = 0;

ScrollView嵌套ListView只显示一行之计算的高度不正确的解决办法(转)

ScrollView嵌套ListView只显示一行之计算的高度不正确的解决办法 分类: android应用开发2013-12-19 09:40 1045人阅读 评论(3) 收藏 举报 AndroidScrollView嵌套ListView显示一行高度不正确 1.前言 从谷歌那里找到的ScrollView嵌套ListView只显示一行的解决办法相信很多人都遇到过,然后大部分都是用这位博主的办法解决的吧 刚开始我也是用这个办法解决的,首先感谢这位哥的大私奉献,贴上地址 http://blog.csd

ScrollView嵌套ListView只显示一行

错误描述 ScrollView嵌套ListView中导致ListView高度计算不正确,只显示一行. 解决方法 重写ListView的onMeasure方法,代码如下. @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int mExpandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_

ScrollView嵌套listView,显示头像错乱

ScrollView嵌套listView导致头像错乱 由于listView显示不全,所以是重写的,在网上找了一下,据说是重写的onMeasure导致的头像错乱 So,使用原始的listView并且使用一下方法: public static void setListViewHeightBasedOnChildren(ListView listView) { ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == nul

安卓开发ScrollView嵌套ListView只显示一行

在用列表控件做一个“更多功能”的界面的时候 1 <?xml version="1.0" encoding="utf-8"?> 2 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 3 android:id="@+id/ScrollView" 4 android:layout_width="fill_paren

ScrollView嵌套ListView只显示一行(转帖)

public class MainActivity extends Activity {        private ListView listView;        @Override        protected void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            setContentView(R.layout.activity_mai

ScrollView嵌套ListView、GridView只显示一行,psts显示不出来

我们经常会用到在ScrollView嵌套ListView.GridView,给layout_height设置wrap或者match的时候,结果只显示一行,而给它设置一个固定的高度虽然能显示出来,但是会显示不全,或者空出一段. 原因:ScrollView在计算高度的时候,如果是wrap或者是match就会出错,结果只显示一行. 解决方案:定义一个类GridView4ScrollView继承GridView,然后重写onMeasure方法 @Override /** * 重写该方法,重新计算Grid