您的位置:首页 > 其它

计算Listview的高度解决Scrollview和listview的冲突

2016-05-13 11:05 357 查看
计算Listview的高度

MainActivity

package com.example.lvandsc;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.MeasureSpec;
import android.view.ViewGroup.LayoutParams;
import android.widget.ArrayAdapter;

public class MainActivity extends Activity {
    private String[] itemdata = { "C语言", "C语言", "C语言", "C语言", "C语言", "C语言",
            "C语言", "C语言", "C语言", "C语言", "C语言", "C语言", "C语言", };
    private Mylistview lv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (Mylistview) this.findViewById(R.id.mylv);
        // 初始化数据
        inidata();
        // 计算宽度
        setlvHight(lv);
    }

    private void setlvHight(Mylistview listview) {
        ArrayAdapter<String> listadapter = (ArrayAdapter<String>) listview
                .getAdapter();
        if (listadapter == null) {
            return;
        }
        int totalHight = 0;
        for (int i = 0; i < listadapter.getCount(); i++) {
            View listitem = listadapter.getView(i, null, listview);
            if (listitem != null) {
                listitem.setLayoutParams(new LayoutParams(
                        LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
                listitem.measure(MeasureSpec.UNSPECIFIED,
                        MeasureSpec.UNSPECIFIED);
                totalHight += listitem.getMeasuredHeight();
            }
            ViewGroup.LayoutParams params = listview.getLayoutParams();
            params.height = listview.getPaddingBottom()
                    + listview.getPaddingTop()
                    + (listadapter.getCount() - 1 * (listview
                            .getDividerHeight())) + totalHight;
            // 判断是否超过屏幕长度的一半
            int h = getWindowManager().getDefaultDisplay().getHeight();
            if (params.height > h / 2) {
                params.height = h / 2;
            }
            listview.setLayoutParams(params);

        }

    }

    private void inidata() {
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, itemdata);
        lv.setAdapter(adapter);

    }

}
自定义listview

package com.example.lvandsc;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.widget.ListView;

public class Mylistview extends ListView {

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

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        boolean b = super.onTouchEvent(ev);
        return b;
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        boolean b = super.onInterceptTouchEvent(ev);
        return b;
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        // TODO Auto-generated method stub
        getParent().requestDisallowInterceptTouchEvent(true);
        boolean b = super.dispatchTouchEvent(ev);
        return b;
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: