一
28
继android中自定义ListView 知道怎样自定义ListView后,也许在开发过程中会遇到这样的需求:
一个Activity,其中不只有ListView一个控件,还有其他的TextView、ImageView、Button等等很多控件,这样很可能会占据屏幕很大一部分,要知道手机的屏幕只有480像素,通常的想法是给这个Activity加上一个ScrollView,让其有滚动条,但是会发现ListView的高度不是随着内容而自动填充的。那么我们可以使用ListView的addHeaderView以及addFooterView 为ListView增加上下的头和尾,这样就可以让ListView填充到整个屏幕。
新建一个Layout:
demo_list_item_header_view.xml:
然后新建一个类,继承自LinearLayout用来显示上面的Layout:
DemoListHeaderView.java
package com.zhang.test.view;
import com.zhang.test.R;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
public class DemoListHeaderView extends LinearLayout {
private static final String TAG = "DemoListHeaderView";
private Context context;
private TextView textView;
public DemoListHeaderView(Context context, AttributeSet attrs) {
super(context, attrs);
initialize(context);
}
public DemoListHeaderView(Context context) {
super(context);
initialize(context);
}
private void initialize(Context context) {
this.context = context;
View view = LayoutInflater.from(this.context).inflate(R.layout.demo_list_item_header_view, null);
textView = (TextView) view.findViewById(R.id.headerTextView);
addView(view);
}
public void setTextView(String text) {
textView.setText(text);
}
}
之后在ListView设置setAdapter之前,一定要在setAdapter之前
加上代码:
DemoListHeaderView headerView = new DemoListHeaderView(context);
headerView.setTextView("Header : ");
listView.addHeaderView(headerView);
DemoListHeaderView footerView = new DemoListHeaderView(context);
footerView.setTextView("Footer : ");
listView.addFooterView(footerView);
全部(根据上一篇文章修改)
package com.zhang.test;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.widget.ListView;
import com.zhang.test.view.DemoListHeaderView;
import com.zhang.test.view.DemoListItemView;
import com.zhang.test.view.adapter.DemoListAdapter;
public class demoActivity extends Activity {
private static final String TAG = "demoActivity";
private Context context;
private ListView listView;
private ArrayList datas;
private DemoListAdapter datasAdapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
context = this;
listView = (ListView) findViewById(R.id.listView);
datas = new ArrayList();
loadData();
datasAdapter = new DemoListAdapter(context, datas);
DemoListHeaderView headerView = new DemoListHeaderView(context);
headerView.setTextView("Header : ");
listView.addHeaderView(headerView);
DemoListHeaderView footerView = new DemoListHeaderView(context);
footerView.setTextView("Footer : ");
listView.addFooterView(footerView);
listView.setAdapter(datasAdapter);
}
private void loadData() {
DemoListItemView.Data d;
for(int i=0; i<10; i++) {
d = new DemoListItemView.Data();
d.topText = "测试top";
d.bottomText = "测试bottom";
datas.add(d);
}
}
}
代码:
DemoListView

no comment untill now