墨迹天气图:
这里都是用的android里面的shape实现的,实现起来比较简单,只是在滚动的时候有点小麻烦。。。
当我们多个ListView超出了它的父控件LinearLayout的时候,它们每个ListView都会有自己的滚动,这不是我们想要的效果,我开始想在LinearLayout外面再加一层ScrollView,但是这样一来,我们就遇到了ScrollView和ListView和冲突问题,会导致ListView显示不全。借网上代码理解,我们只有固定ListView的高度,让其不自动调整调整,就不会与ScrollView冲突了。代码如下:
public void setListViewHeightBasedOnChildren(ListView listView) { 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); listItem.measure(0, 0); totalHeight += listItem.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); ((ViewGroup.MarginLayoutParams) params).setMargins(10, 10, 10, 10); listView.setLayoutParams(params); }
在activity中的onCreate方法中调用该方法即可。
参考scrollView的xml代码:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" > <ImageView android:id="@+id/list_view_corner_item_icon" android:layout_marginLeft="@dimen/list_view_corner_margin_left" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/list_view_corner_item_text" android:text="测试标题" android:textSize="20sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_toRightOf="@+id/list_view_corner_item_icon"/> <ImageView android:id="@+id/list_view_corner_item_arrow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/arrow" android:layout_centerVertical="true" android:layout_alignParentRight="true" android:layout_marginRight="15dp"/> </RelativeLayout> </LinearLayout>
记得用LinearLayout包围该RelativeLayout,否则在方法中这一行listItem.measure(0, 0);会报空指针异常!