Android动态计算ListView高度

来源:互联网 发布:audition cc 2017 mac 编辑:程序博客网 时间:2024/05/08 16:13

1:上布局代码;

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.administrator.myapplication.MainActivity">    <ListView        android:id="@+id/lv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerInParent="true" /></RelativeLayout>
2:设置数据;

 ArrayList<String> datas = new ArrayList<>();        for (int i = 0; i < 50; i++) {            datas.add("测试数据" + i);        }        ListView listView = (ListView) findViewById(R.id.lv);        listView.setAdapter(new MyBaseAdapter(datas));

3:适配器;

//适配器    private class MyBaseAdapter extends BaseAdapter {        private ArrayList<String> datas;        private MyBaseAdapter(ArrayList<String> datas) {            this.datas = datas;        }        @Override        public int getCount() {            return datas.size();        }        @Override        public Object getItem(int position) {            return null;        }        @Override        public long getItemId(int position) {            return 0;        }        @Override        public View getView(int position, View convertView, ViewGroup parent) {            TextView textView = new TextView(MainActivity.this);            textView.setText(datas.get(position));            textView.setPadding(0, 40, 0, 40);            textView.setGravity(Gravity.CENTER_HORIZONTAL);            return textView;        }    }

3:关键的一步,在设置过适配器以后,调用以下方法为ListView设置高度;

public void setListViewHeightBasedOnChildren(ListView listView) {        // 获取ListView对应的Adapter        ListAdapter listAdapter = listView.getAdapter();        if (listAdapter == null) {            return;        }        int totalHeight = 0;        for (int i = 0; i < listAdapter.getCount(); i++) {            View listItem = listAdapter.getView(i, null, listView);            //计算item的宽高            listItem.measure(0, 0);            //累计所有item的高度            totalHeight += listItem.getMeasuredHeight();        }        ViewGroup.LayoutParams params = listView.getLayoutParams();        params.height = totalHeight + (listView.getDividerHeight()) *(listAdapter.getCount()-1);        listView.setLayoutParams(params);    }



0 0