我这里写上中下三个layout来写。
所有的前提都是先建一个项目,建项目不会的请看我的另一个笔记http://note.youdao.com/noteshare?id=4cd08a266542b4c60a834da295b0e2b0
我建了一个HeadAndFootOtherActivity,和headfoot_layout.xml(承载ListView)、lvhead_layout.xml(承载ImageView)、 lvfoot_layout.xml(承载Button)。
我在headfoot_xml写了两个,一个是ListView,一个是TextView,TextView是为了当ListView显示的数据为空时显示的数据,给用户一个比较友好的画面。
然后来看Activity中的设置
import android.os.Bundle
import android.support.annotation.Nullable
import android.support.v7.app.AppCompatActivity
import android.view.LayoutInflater
import android.view.View
import android.widget.ArrayAdapter
import android.widget.Button
import android.widget.ImageView
import android.widget.ListView
import android.widget.TextView
import java.util.ArrayList
import java.util.List
public class HeadAndFootOtherActivityextends AppCompatActivity {
private ListViewlistView
private Listlist
private TextViewtextView
private ArrayAdapterarrayAdapter
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState)
setContentView(R.layout.headfoot_layout) //加载布局
listView = findViewById(R.id.hfLV) //获取布局中的listView
textView = findViewById(R.id.hfTV)//获取布局中的textView
list =new ArrayList<>() //模拟listView中的数据
for (int i =0i <20i++) {
list.add("item" + i)
}
//把list的数据加载到适配器中
arrayAdapter =new ArrayAdapter<>(HeadAndFootOtherActivity.this, android.R.layout.simple_list_item_1, list)
//将lvhead_layout xml布局文件转换成view视图
View headerView = LayoutInflater.from(HeadAndFootOtherActivity.this).inflate( R.layout.lvhead_layout, null)
//从headView视图中获取imageView控件
ImageView imageView = headerView.findViewById(R.id.iv)
//给imageView设置资源,这个资源我放在res下的drawable,名字为p1
imageView.setImageResource(R.drawable.p1)
//给listView添加头部视图
listView.addHeaderView(headerView)
//接下来类似加头部视图的做法
View footerView = LayoutInflater.from(HeadAndFootOtherActivity.this).inflate(R.layout.lvfoot_layout, null)
Button btn = footerView.findViewById(R.id.btn)
//添加按钮的点击事件,模拟点击加载更多的数据
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int index =list.size()
for (int i = indexi <index +10i++) {
list.add("item" + i)
}
//把适配器中的数据更新
arrayAdapter.notifyDataSetChanged()
}
})
//给listView加载尾部视图
listView.addFooterView(footerView)
//这里需要注意的是, 不管是头部视图还是尾部视图都必须在加载适配器之前加载,不然会报错
listView.setAdapter(arrayAdapter)
//这一句是当你的listView没有任何数据时,显示这个TextView,对用户显示比较友好。
listView.setEmptyView(textView)
}
}
写到这里,listView就基本上写完了,不要忘记在你的注册表里面注册你的Activity。
写了那么多的文字,来看一下效果图。
好啦,这个结束啦!!!有什么问题多多指教,安卓新手。
定义一个样式一条线<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)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)