如果一个界面里面有多个ListView,还需要全屏能滚动,这样ListView无法和ScrollView 同时使用,有冲突,解决起来好像比较麻烦。
使用LinearLayout 和 ScrollView自定义ListView。
public class DataModel {
public DataModel(String name,String grade,String price,String time){
this.name = name;
this.grade = grade;
this.price = price;
this.time = time;
}
public String name;
public String grade;
public String price;
public String time;
}
public class ListViewLoader {
public final static int SPACE = 10;
public final static int screenWidth = 480;
public final static String TH[] = { "名称", "级别", "Tag", "更新时间" };
private LinearLayout myListView;
private Activity activity;
public ListViewLoader(View listrootView, View headerView, Activity activity) {
this.activity = activity;
myListView = (LinearLayout) listrootView;
createTHViewForList(activity, (LinearLayout) headerView);
}
public void loadData(ArrayList<DataModel> dataList) {
createPriceList(dataList);
}
public void createTHViewForList(Activity context, LinearLayout headerView) {
int width = (screenWidth - SPACE) / TH.length;
headerView.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout.LayoutParams Params = new LinearLayout.LayoutParams(width,
40);
for (String str : TH) {
headerView.addView(createTHTextView(str, context), Params);
}
}
public static TextView createTHTextView(String title, Activity context) {
TextView view = new TextView(context);
view.setText(title);
view.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13);
view.setGravity(Gravity.CENTER_HORIZONTAL);
view.setTextColor(Color.BLACK);
TextPaint paint = view.getPaint();
paint.setFakeBoldText(true);
return view;
}
public LinearLayout createPriceListItem(DataModel data) {
int width = (screenWidth - SPACE) / TH.length; // 根据手机屏幕计算
// 每个列的宽度,多屏幕适用,SPACE为空隙,UI会好看些。
LinearLayout itemView = new LinearLayout(activity);
itemView.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout.LayoutParams Params = new LinearLayout.LayoutParams(width,
38);
TextView t = createDataTextView(data.name, activity);
itemView.addView(t, Params);
t = createDataTextView(data.grade, activity);
itemView.addView(t, Params);
t = createDataTextView(data.price, activity);
itemView.addView(t, Params);
t = createDataTextView(data.time, activity);
itemView.addView(t, Params);
return itemView;
}
LinearLayout.LayoutParams Params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT, 40);
public void createPriceList(final ArrayList<DataModel> dataModelList) {
Params.leftMargin = 3;
Params.rightMargin = 3;
Params.gravity = Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL;
for (DataModel mdata : dataModelList) {
DataModel data = (DataModel) mdata;
final ViewGroup itemView = createPriceListItem(data);
itemView.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
// 点击事件
}
});
myListView.addView(itemView, Params);
}
}
public static TextView createDataTextView(String title, Activity context) {
TextView view = new TextView(context);
view.setText(title);
view.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 13);
view.setGravity(Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL);
view.setTextColor(Color.BLACK);
return view;
}
}
Activity主要代码
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListViewLoader loader = new ListViewLoader(
findViewById(R.id.listviewLy2Id),
findViewById(R.id.listviewHeaderId), this);
ArrayList<DataModel> modelList = new ArrayList<DataModel>();
modelList.add(new DataModel("苹果1", "1", "2.3", "2013-02-19"));
modelList.add(new DataModel("苹果2", "2", "2.5", "2013-02-19"));
modelList.add(new DataModel("苹果3", "3", "2.4", "2013-02-19"));
modelList.add(new DataModel("苹果4", "4", "2.2", "2013-02-19"));
modelList.add(new DataModel("苹果1", "1", "2.3", "2013-02-19"));
modelList.add(new DataModel("苹果2", "2", "2.5", "2013-02-19"));
loader.loadData(modelList);
}
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<LinearLayout
android:id="@+id/listviewHeaderId"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
<ScrollView
android:layout_width="fill_parent"
android:layout_height="200dip" >
<LinearLayout
android:id="@+id/listviewLy2Id"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
</ScrollView>
</LinearLayout>
结果: