
在代码中使用 listView.addHeaderView(…) 方法可以在ListView组件上方添加上其他组件,并且连结在一起像是一个新组件。如果多次使用 .addHeaderView(…) ,则最先添加的组件在最上方,按添加的先后顺序由上到下罗列。
此时listView 的 position = 0 的位置对应的是view1,而不再是原来listView中的第一条了。如下图所示:
定义一个样式一条线<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 = 0i <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)
印象中Add 是一个方法,不能用等号赋值 。你把 等号 去掉试试看,应该就可以了,然后用Me.ListView1.ColumnHeaders(i)对象的相关属性设置列的属性就可以了,例如: 设置列宽第一列的宽度为2000:Me.ListView1.ColumnHeaders(0).colwidth=2000
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)