android 怎么给listview添加一个固定表头以及显示像table的效果
1个回答
展开全部
定义一个样式一条线
<style name="vertical_layout">
<item name="android:layout_width">1dp</item>
<item name="android:layout_height">fill_parent</item>
<item name="android:background">#dadada</item>
</style>
1.为表头新建一个layout:a_item.xml(一共设置3个列名)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/a_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:cacheColorHint="#00000000"
android:orientation="horizontal" >
<TextView
android:id="@+id/item1bzrbjzb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:ellipsize="none"
android:gravity="center"
android:paddingBottom="5dp"
android:paddingTop="5dp"
android:singleLine="false"
android:textSize="15.0sp" >
</TextView>
<View style="@style/vertical_layout" /> <!-- 一条线 -->
<TextView
android:id="@+id/item2bzrbjzb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:ellipsize="none"
android:gravity="center"
android:paddingBottom="5dp"
android:paddingTop="5dp"
android:singleLine="false"
android:text="@string/bzr_km" <!-- 列名-->
android:textColor="@android:color/black"
android:textSize="15.0sp" >
</TextView>
<View style="@style/vertical_layout" /> <!-- 一条线 -->
<TextView
android:id="@+id/item3bzrbjzb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:ellipsize="none"
android:gravity="center"
android:paddingBottom="5dp"
android:paddingTop="5dp"
android:singleLine="false"
android:text="@string/bzr_bjqk" <!-- 列名-->
android:textColor="@android:color/black"
android:textSize="15.0sp" >
</TextView>
<View style="@style/vertical_layout" /> <!-- 一条线 -->
<TextView
android:id="@+id/item4bzrbjzb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:ellipsize="none"
android:gravity="center"
android:paddingBottom="5dp"
android:paddingTop="5dp"
android:singleLine="false"
android:text="@string/bzr_jfjgl" <!-- 列名-->
android:textColor="@android:color/black"
android:textSize="15.0sp" >
</TextView>
<TextView
android:id="@+id/item6ctj"
android:layout_width="100.0dip"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:ellipsize="none"
android:gravity="center"
android:paddingBottom="5dp"
android:paddingTop="5dp"
android:singleLine="false" >
</TextView>
</LinearLayout>
第一个和最后一个textView不给赋值,用于填充屏幕的空白,显示好看
2.给界面**Activity新建一个main_layout,应用刚才的a_item.xml以及添加一个继承了listView的view对象HVListView
***
<include layout="@layout/a_item" />
<com.gdtech.znpc.android.view.HVListView
android:id="@android:id/list"
android:background="@android:color/white" android:fastScrollEnabled="true"
android:fadingEdgeLength="0.0sp" android:layout_width="wrap_content"
android:layout_height="fill_parent" android:drawSelectorOnTop="false"
android:divider="#dadada"
android:dividerHeight="1.0dip"
android:cacheColorHint="#00000000">
</com.gdtech.znpc.android.view.HVListView >
******
3.获取屏幕的分辨率 为每个表头的设置宽度
private DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
private int w = dm.widthPixels / 16; // 当前分辨率 宽度 分为16份
获取a_item里面的每个textView的id 进行宽度设置
mListView = (HVListView) findViewById(android.R.id.list);
// 设置列头
mListView.mListHead = (LinearLayout) findViewById(R.id.a_item);
// 设置表头的宽度
TextView t11 = (TextView) findViewById(R.id.item1bzrbjzb);
TextView t12 = (TextView) findViewById(R.id.item2bzrbjzb);
TextView t13 = (TextView) findViewById(R.id.item3bzrbjzb);
TextView t14 = (TextView) findViewById(R.id.item4bzrbjzb);
//t13.setText("成绩");
t11.setWidth(w * 0); //不显示第一列
t12.setWidth(w * 3);
t13.setWidth(w * 6);
t14.setWidth(w * 6);
4.给HVListView添加适配器,并设置每列的宽度和表头对应
class ViewHolderbjzb { // 这个类里面定义的TextView数量和表头里面的TextView要一致
TextView item1bjzb;
TextView item2bjzb;
TextView item3bjzb;
TextView item4bjzb;
}
mAdapter = new DataAdapter1();
mListView.setAdapter(mAdapter);
private class DataAdapter1 extends BaseAdapter {
@Override
public int getCount() {
return hang;// 固定显示多少行数据
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater1.inflate(R.layout.bzr_fx_bjzb_head_item,
null);
holder = new ViewHolderbjzb();
holder.item1bjzb = ((TextView) convertView
.findViewById(R.id.item1bzrbjzb));
holder.item2bjzb = ((TextView) convertView
.findViewById(R.id.item2bzrbjzb));
holder.item3bjzb = ((TextView) convertView
.findViewById(R.id.item3bzrbjzb));
holder.item4bjzb = ((TextView)convertView
.findViewById(R.id.item4bzrbjzb));
// holder.item4bjzb=((TextView)
// convertView.findViewById(R.id.item4bjzb));
// holder.item5bjzb=((TextView)
// convertView.findViewById(R.id.item5bjzb));
convertView.setTag(holder);
// 设置表格内容宽度,与表头对应
holder.item1bjzb.setWidth(w * 0);
holder.item2bjzb.setWidth(w * 3);
holder.item3bjzb.setWidth(w * 6);
holder.item4bjzb.setWidth(w * 6);
holder.item1bjzb.setText("");
holder.item2bjzb.setText("");
holder.item3bjzb.setText("");
holder.item4bjzb.setText("");
// holder.item4bjzb.setText("");
// holder.item5bjzb.setText("");
} else {
holder = (ViewHolderbjzb) convertView.getTag();
}
for (int i = 0; i < listDatas.size(); i++) {
// 显示列的id数
// holder.item1bjzb.setText((position + 1) + "");
/*
listDatas 就是要显示的后台数据
*/
if (position == i) {
Map<String, Object> row = listDatas.get(position);
holder.item1bjzb.setText("用后台获取的数据 进行填充就可以"));
holder.item2bjzb.setText("用后台获取的数据 进行填充就可以"));
holder.item3bjzb.setText("用后台获取的数据 进行填充就可以"));
holder.item4bjzb.setText("用后台获取的数据 进行填充就可以"));
}
}
// 设置隔行颜色
if (position % 2 != 0) {
convertView.setBackgroundResource(R.drawable.listview_color_1);
} else {
convertView.setBackgroundResource(R.drawable.listview_color_2);
}
return convertView;
}
网上有很多解决 android listview 水平和垂直滚动的代码,我没有按照他们说的做(以前没搜到 O(∩_∩)O~) 我采用的是添加HorizontalScrollView
Java代码
1. < ScrollView android:id="@+id/ScrollView01"
2. android:layout_height="300px"
3. android:layout_x="16px"
4. android:layout_y="84px"
5. android:layout_width="290px"
6. android:scrollbars="horizontal|vertical">
7. < HorizontalScrollView android:id="@+id/HorizontalScrollView01"
8. android:layout_height="fill_parent"
9. android:layout_width="wrap_content">
10. < LinearLayout android:id="@+id/LinearLayout02"
11. android:layout_width="wrap_content"
12. android:orientation="vertical"
13. android:layout_height="fill_parent">
14. < ListView android:id="@+id/listview"
15. android:layout_height="300px"
16. android:layout_width="fill_parent">
17. < /ListView>
18. < /LinearLayout>
19. < /HorizontalScrollView>
20. < /ScrollView>
我有一个Listview,因为横屏和竖屏原因,内容较多,竖屏会出现有些数据无法显示
于是让Listview在横向上可以滚动。
解决的办法是,用HorizontalScrollView包装Listview,这样,当竖屏时,就会出现横向滚动条。
<HorizontalScrollView
Android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true">
<ListView android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="@drawable/email_box"
android:id="@+id/advice_main_list_id"
android:padding="5dip"/>
</HorizontalScrollView>
但此时又出现了另一个问题,加上HorizontalScrollView后,虽然我已经设了Listview的宽度是fill_parent。但当内容较少时,Listview还是根据内容自适应宽度,不能满屏。
此时,需要设置一个属性就能解决问题了。设置HorizontalScrollView的android:fillViewport="true"。也就是设置是否将HorizontalScrollView的内容宽度拉伸以适应视口(viewport)
<style name="vertical_layout">
<item name="android:layout_width">1dp</item>
<item name="android:layout_height">fill_parent</item>
<item name="android:background">#dadada</item>
</style>
1.为表头新建一个layout:a_item.xml(一共设置3个列名)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/a_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:cacheColorHint="#00000000"
android:orientation="horizontal" >
<TextView
android:id="@+id/item1bzrbjzb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:ellipsize="none"
android:gravity="center"
android:paddingBottom="5dp"
android:paddingTop="5dp"
android:singleLine="false"
android:textSize="15.0sp" >
</TextView>
<View style="@style/vertical_layout" /> <!-- 一条线 -->
<TextView
android:id="@+id/item2bzrbjzb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:ellipsize="none"
android:gravity="center"
android:paddingBottom="5dp"
android:paddingTop="5dp"
android:singleLine="false"
android:text="@string/bzr_km" <!-- 列名-->
android:textColor="@android:color/black"
android:textSize="15.0sp" >
</TextView>
<View style="@style/vertical_layout" /> <!-- 一条线 -->
<TextView
android:id="@+id/item3bzrbjzb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:ellipsize="none"
android:gravity="center"
android:paddingBottom="5dp"
android:paddingTop="5dp"
android:singleLine="false"
android:text="@string/bzr_bjqk" <!-- 列名-->
android:textColor="@android:color/black"
android:textSize="15.0sp" >
</TextView>
<View style="@style/vertical_layout" /> <!-- 一条线 -->
<TextView
android:id="@+id/item4bzrbjzb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:ellipsize="none"
android:gravity="center"
android:paddingBottom="5dp"
android:paddingTop="5dp"
android:singleLine="false"
android:text="@string/bzr_jfjgl" <!-- 列名-->
android:textColor="@android:color/black"
android:textSize="15.0sp" >
</TextView>
<TextView
android:id="@+id/item6ctj"
android:layout_width="100.0dip"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:ellipsize="none"
android:gravity="center"
android:paddingBottom="5dp"
android:paddingTop="5dp"
android:singleLine="false" >
</TextView>
</LinearLayout>
第一个和最后一个textView不给赋值,用于填充屏幕的空白,显示好看
2.给界面**Activity新建一个main_layout,应用刚才的a_item.xml以及添加一个继承了listView的view对象HVListView
***
<include layout="@layout/a_item" />
<com.gdtech.znpc.android.view.HVListView
android:id="@android:id/list"
android:background="@android:color/white" android:fastScrollEnabled="true"
android:fadingEdgeLength="0.0sp" android:layout_width="wrap_content"
android:layout_height="fill_parent" android:drawSelectorOnTop="false"
android:divider="#dadada"
android:dividerHeight="1.0dip"
android:cacheColorHint="#00000000">
</com.gdtech.znpc.android.view.HVListView >
******
3.获取屏幕的分辨率 为每个表头的设置宽度
private DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
private int w = dm.widthPixels / 16; // 当前分辨率 宽度 分为16份
获取a_item里面的每个textView的id 进行宽度设置
mListView = (HVListView) findViewById(android.R.id.list);
// 设置列头
mListView.mListHead = (LinearLayout) findViewById(R.id.a_item);
// 设置表头的宽度
TextView t11 = (TextView) findViewById(R.id.item1bzrbjzb);
TextView t12 = (TextView) findViewById(R.id.item2bzrbjzb);
TextView t13 = (TextView) findViewById(R.id.item3bzrbjzb);
TextView t14 = (TextView) findViewById(R.id.item4bzrbjzb);
//t13.setText("成绩");
t11.setWidth(w * 0); //不显示第一列
t12.setWidth(w * 3);
t13.setWidth(w * 6);
t14.setWidth(w * 6);
4.给HVListView添加适配器,并设置每列的宽度和表头对应
class ViewHolderbjzb { // 这个类里面定义的TextView数量和表头里面的TextView要一致
TextView item1bjzb;
TextView item2bjzb;
TextView item3bjzb;
TextView item4bjzb;
}
mAdapter = new DataAdapter1();
mListView.setAdapter(mAdapter);
private class DataAdapter1 extends BaseAdapter {
@Override
public int getCount() {
return hang;// 固定显示多少行数据
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater1.inflate(R.layout.bzr_fx_bjzb_head_item,
null);
holder = new ViewHolderbjzb();
holder.item1bjzb = ((TextView) convertView
.findViewById(R.id.item1bzrbjzb));
holder.item2bjzb = ((TextView) convertView
.findViewById(R.id.item2bzrbjzb));
holder.item3bjzb = ((TextView) convertView
.findViewById(R.id.item3bzrbjzb));
holder.item4bjzb = ((TextView)convertView
.findViewById(R.id.item4bzrbjzb));
// holder.item4bjzb=((TextView)
// convertView.findViewById(R.id.item4bjzb));
// holder.item5bjzb=((TextView)
// convertView.findViewById(R.id.item5bjzb));
convertView.setTag(holder);
// 设置表格内容宽度,与表头对应
holder.item1bjzb.setWidth(w * 0);
holder.item2bjzb.setWidth(w * 3);
holder.item3bjzb.setWidth(w * 6);
holder.item4bjzb.setWidth(w * 6);
holder.item1bjzb.setText("");
holder.item2bjzb.setText("");
holder.item3bjzb.setText("");
holder.item4bjzb.setText("");
// holder.item4bjzb.setText("");
// holder.item5bjzb.setText("");
} else {
holder = (ViewHolderbjzb) convertView.getTag();
}
for (int i = 0; i < listDatas.size(); i++) {
// 显示列的id数
// holder.item1bjzb.setText((position + 1) + "");
/*
listDatas 就是要显示的后台数据
*/
if (position == i) {
Map<String, Object> row = listDatas.get(position);
holder.item1bjzb.setText("用后台获取的数据 进行填充就可以"));
holder.item2bjzb.setText("用后台获取的数据 进行填充就可以"));
holder.item3bjzb.setText("用后台获取的数据 进行填充就可以"));
holder.item4bjzb.setText("用后台获取的数据 进行填充就可以"));
}
}
// 设置隔行颜色
if (position % 2 != 0) {
convertView.setBackgroundResource(R.drawable.listview_color_1);
} else {
convertView.setBackgroundResource(R.drawable.listview_color_2);
}
return convertView;
}
网上有很多解决 android listview 水平和垂直滚动的代码,我没有按照他们说的做(以前没搜到 O(∩_∩)O~) 我采用的是添加HorizontalScrollView
Java代码
1. < ScrollView android:id="@+id/ScrollView01"
2. android:layout_height="300px"
3. android:layout_x="16px"
4. android:layout_y="84px"
5. android:layout_width="290px"
6. android:scrollbars="horizontal|vertical">
7. < HorizontalScrollView android:id="@+id/HorizontalScrollView01"
8. android:layout_height="fill_parent"
9. android:layout_width="wrap_content">
10. < LinearLayout android:id="@+id/LinearLayout02"
11. android:layout_width="wrap_content"
12. android:orientation="vertical"
13. android:layout_height="fill_parent">
14. < ListView android:id="@+id/listview"
15. android:layout_height="300px"
16. android:layout_width="fill_parent">
17. < /ListView>
18. < /LinearLayout>
19. < /HorizontalScrollView>
20. < /ScrollView>
我有一个Listview,因为横屏和竖屏原因,内容较多,竖屏会出现有些数据无法显示
于是让Listview在横向上可以滚动。
解决的办法是,用HorizontalScrollView包装Listview,这样,当竖屏时,就会出现横向滚动条。
<HorizontalScrollView
Android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true">
<ListView android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:background="@drawable/email_box"
android:id="@+id/advice_main_list_id"
android:padding="5dip"/>
</HorizontalScrollView>
但此时又出现了另一个问题,加上HorizontalScrollView后,虽然我已经设了Listview的宽度是fill_parent。但当内容较少时,Listview还是根据内容自适应宽度,不能满屏。
此时,需要设置一个属性就能解决问题了。设置HorizontalScrollView的android:fillViewport="true"。也就是设置是否将HorizontalScrollView的内容宽度拉伸以适应视口(viewport)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询