动态设置ListView的高度

来源:互联网 发布:类似008神器的软件 编辑:程序博客网 时间:2024/05/29 10:09

“`
package com.android.customlistviewheight;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

private ListView listView;List<String> list = new ArrayList<>();@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    listView = ((ListView) findViewById(R.id.listview));    getList();    MyAdapter myAdapter = new MyAdapter();    listView.setAdapter(myAdapter);    setListViewHeight(listView);}private void getList() {    list.clear();    for (int i = 0; i < 20; i++) {        list.add("数据;;" + i);    }}public void setListViewHeight(ListView listView) {    ListAdapter adapter = listView.getAdapter();    if (adapter == null) {        return;    }    int totalHeight = 0;    for (int i = 0; i < 8; i++) {        View listViewItem = adapter.getView(i, null, listView);        listViewItem.measure(0, 0);        totalHeight += listViewItem.getMeasuredHeight();    }    ViewGroup.LayoutParams layoutParams = listView.getLayoutParams();    layoutParams.height = totalHeight + (listView.getDividerHeight()) * (adapter.getCount() - 1);    listView.setLayoutParams(layoutParams);//设置listView高度}class MyAdapter extends BaseAdapter {    @Override    public int getCount() {        return list.size();    }    @Override    public Object getItem(int position) {        return list.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder holder = null;        if (convertView == null) {            holder = new ViewHolder();            convertView = LayoutInflater.from(MainActivity.this).inflate(R.layout.item, parent, false);            holder.tv = (TextView) convertView.findViewById(R.id.tv);            convertView.setTag(holder);        }        holder = (ViewHolder) convertView.getTag();        holder.tv.setText(list.get(position));        return convertView;    }}static class ViewHolder {    TextView tv;}

}

主要功能代码在 setListViewHeight()方法中 注意:在setAdapter之后调用方法

0 0
原创粉丝点击