android 怎么给listview添加一个固定表头以及显示像table的效果 以及水平和竖直滚动 – seeu72的日志 – 网易博客

androidlistview表头

定义一个样式一条线

    <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,这样,当竖屏时,就会出现横向滚动条。  

  1. <HorizontalScrollView  

  2.    Android:layout_width=“fill_parent”  

  3.    android:layout_height=“fill_parent”  

  4.    android:fillViewport=“true”>  

  5.   <ListView android:layout_width=“fill_parent”    

  6.      android:layout_height=“fill_parent”  

  7.      android:layout_weight=“1”  

  8.      android:background=“@drawable/email_box”  

  9.      android:id=“@+id/advice_main_list_id”  

  10.      android:padding=“5dip”/>  

  11. </HorizontalScrollView>  

   

 但此时又出现了另一个问题,加上HorizontalScrollView后,虽然我已经设了Listview的宽度是fill_parent。但当内容较少时,Listview还是根据内容自适应宽度,不能满屏。

   

此时,需要设置一个属性就能解决问题了。设置HorizontalScrollView的android:fillViewport=”true”。也就是设置是否将HorizontalScrollView的内容宽度拉伸以适应视口(viewport)

来源URL:http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105780315e5180743ca0804b22818448e4675f40506694ea7a7d0d548d98297a40e91a1ab1a12b71320222bc9bc9824eddb991292a8b2037731f8d4112d418b2df037881769f09b5f959bae1a62593df8c889e12179104406d81809c2a0303bd19e76547f4d69c&p=9a769a47cd870bff57ed97781c4bc4&newp=cb6fc64ad4934eaf5bebe62b495983231610db2151d4d613&user=baidu&fm=sc&query=android+listview%B1%ED%CD%B7&qid=b459bdbf00019731&p1=1