scrollview中嵌套listview只显示一行的解决方案

xiaoxiao2021-02-28  85

在开发的过程当中,由于手机屏幕的大小的限制,我们经常需要使用滑动的方式,来显示更多的内容。在最近的工作中,遇见一个需求,需要将ListView嵌套到ScrollView中显示。于是乎有了如下布局: 

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"        xmlns:tools="http://schemas.android.com/tools"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:background="#FFE1FF"        android:orientation="vertical" >        <ScrollView            android:layout_width="match_parent"            android:layout_height="match_parent" >            <LinearLayout                android:layout_width="match_parent"                android:layout_height="match_parent" >                <ListView                    android:id="@+id/listView1"                    android:layout_width="match_parent"                    android:layout_height="match_parent"                    android:fadingEdge="vertical"                    android:fadingEdgeLength="5dp" />            </LinearLayout>        </ScrollView>    </LinearLayout>   

 

运行程序结果是无论你如何调整layout_width,layout_height属性,ListView列表只显示一列 

在查阅的各种文档和资料后,发现在ScrollView中嵌套ListView空间,无法正确的计算ListView的大小,故可以通过代码,根据当前的ListView的列表项计算列表的尺寸。实现代码如下: 

 

public class MainActivity extends Activity {        private ListView listView;        @Override        protected void onCreate(Bundle savedInstanceState) {            super.onCreate(savedInstanceState);            setContentView(R.layout.activity_main);            listView = (ListView) findViewById(R.id.listView1);            String[] data = new String[] { "黄瓜""橙子",… … "葡萄"};            listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data));            setListViewHeightBasedOnChildren(listView);        }        /**     * 当scrollview内部嵌套listview时,listview无论怎么设置都只会显示一行,只能通过动态的计算listview的     * 高度来展示listview,以下便是计算方法     *     * @param listView     */     public void setListViewHeightBasedOnChildren(ListView listView) {            // 获取ListView对应的Adapter            ListAdapter listAdapter = listView.getAdapter();            if (listAdapter == null) {                return;            }                int totalHeight = 0;            for (int i = 0, len = listAdapter.getCount(); i < len; i++) {                // listAdapter.getCount()返回数据项的数目                View listItem = listAdapter.getView(i, null, listView);                // 计算子项View 的宽高                listItem.measure(00);                 // 统计所有子项的总高度                totalHeight += listItem.getMeasuredHeight();             }                ViewGroup.LayoutParams params = listView.getLayoutParams();            params.height = totalHeight+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));            // listView.getDividerHeight()获取子项间分隔符占用的高度            // params.height最后得到整个ListView完整显示需要的高度            listView.setLayoutParams(params);        }    }    运行结果,OK问题搞定,打完收工  

转载请注明原文地址: https://www.6miu.com/read-94857.html

最新回复(0)